Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.14 first-letter Media Specjalna Dyskusja Wikipedysta Dyskusja wikipedysty Wikibooks Dyskusja Wikibooks Plik Dyskusja pliku MediaWiki Dyskusja MediaWiki Szablon Dyskusja szablonu Pomoc Dyskusja pomocy Kategoria Dyskusja kategorii Wikijunior Dyskusja Wikijuniora TimedText TimedText talk Moduł Dyskusja modułu Wydarzenie Dyskusja wydarzenia Moduł:StronicowyParser/ZbieranieDanychStron 828 55009 551265 547978 2026-08-10T17:29:26Z Persino 2851 551265 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,toc,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) return function() local toc; if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,toc,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local wynik=czy_spis_function(); if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; a3vawtv8s6kzmzu71nyfgu5gmdskzyc 551267 551265 2026-08-10T17:49:15Z Persino 2851 551267 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) return function() if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local wynik=czy_spis_function(); if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; ciwt1ibjkfigyspxa548mcxeks0ryfl 551268 551267 2026-08-10T17:54:49Z Persino 2851 551268 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) return function() if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local wynik=czy_spis_function(); if(not czy_artykul_korzystany)then if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; r72rarxblwcqmb9tcr48q476blvtk1y 551273 551268 2026-08-10T18:46:40Z Persino 2851 551273 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca) return function() if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca); local wynik=czy_spis_function(); if(not czy_artykul_korzystany)then if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; 8g41w1vncz01gc2iuqbw236gs0m4ce4 551278 551273 2026-08-10T19:30:20Z Persino 2851 551278 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca) return function() if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca); local wynik=czy_spis_function(); if(not czy_artykul_korzystany)then if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; fssr48kdrt7h12wizd2s94gdy6baa2f 551282 551278 2026-08-10T20:07:04Z Persino 2851 551282 Scribunto text/plain local p={}; function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod) if(lista_dwuelementowa)then local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then tabela_elementow_strony_kodow[nazwa_obiektu]={}; tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(not uchwyty_bez_numeracji)then tab_obiekt.uchwyty_bez_numeracji={}; uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; end; uchwyty_bez_numeracji[kod]=lista_dwuelementowa; end; end; function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod) local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu]; if(not tab_obiekt)then return nil;end; local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji; if(uchwyty_bez_numeracji)then return uchwyty_bez_numeracji[kod]; end; end; function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu; local html_modul=require("Module:Html"); kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true); if(kod_uchwytu~="")then KtorySzablonMaZwracacKategorie(kod_uchwytu); local lista_dwuelementowa={}; lista_dwuelementowa[1]=kod_uchwytu; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_obiektu=true; end; if(tab_numer)then tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1; local numer=tab_numer[nazwa_obiektu]; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa); else table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); end; return lista_dwuelementowa; end; end; function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji]; if(kod_uchwytu)then local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return lista_dwuelementowa; end; end; function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(nazwa_artykulu=="")then return;end; local czy_element_wystepuje_w_tablicy=false; local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron; if(tablica_przestrzeni_wszystkiego)then local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni]; if(tabela_przestrzeni_ksiazek)then local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki] if(tabela_ksiazek)then local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki]; if(tab_ksiazki)then if(tab_ksiazki.spis)then --czy_lista_niepusta=true; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); for _,tab_value in ipairs(tab_ksiazki.spis)do if(tab_value[2])then for _,artykul_w_bazie_element in ipairs(tab_value[2])do local artykul_w_bazie=artykul_w_bazie_element[1]; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then czy_element_wystepuje_w_tablicy=true; break; end; end; end; if(czy_element_wystepuje_w_tablicy)then break;end; end; end; end; end; end; end; if(not czy_element_wystepuje_w_tablicy)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki) or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"); end; end; end; end; end; function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu) local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil; local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil; local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1); end; end; if(czy_artykul_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2); end; end; if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3); end; end; end; function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe) local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2]; local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3]; local parametry_modul=require("Module:Parametry"); local nazwy_modul=require("Module:Nazwy"); local html_modul=require("Module:Html"); if(nazwa_artykulu)then nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",}; end; local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni; if(pelna_nazwa_ksiazki)then pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true); local techniczne_modul=require("Module:Techniczne"); pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,}; ---- local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw))); --pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); end; return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; end; function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu; if(not czy_inna_wartosc_tekst)then nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true); else nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4]; end; --local ksiazkowe_modul=require("Module:Książkowe"); --pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](); --nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](); if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then local tabela_nazw={}; local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw); local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw); local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false); end; end; function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie) local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end; local parametry_modul=require("Module:Parametry"); if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end; local szablonowe_modul=require("Module:Szablonowe"); if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu())) or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu())) )then return;end; local nazwy_modul=require("Module:Nazwy"); local ksiazkowe_modul=require("Module:Książkowe"); local html_modul=require("Module:Html"); if(nazwa_jednostki)then nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true); end; local tabela_nazw_art={}; local nazwa_jednostki=(nazwa_jednostki and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1") or nil ) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art); if(nazwa_przestrzeni)then nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true); end; local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art); local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local techniczne_modul=require("Module:Techniczne"); strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,}; --strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona); local tabela_nazw={}; local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw))); local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw); if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end; local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej); end; function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); local nazwy_modul=require("Module:Nazwy"); local czy_inna_wartosc_tekst=true; if((nazwa_artykulu)and(nazwa_ksiazki))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((nazwa_artykulu)and(not nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); elseif((not nazwa_artykulu)and(nazwa_ksiazki))then local ksiazkowe_modul=require("Module:Książkowe"); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"](); local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"](); ---- tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,}); end; end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE) local pudelko_modul=require("Module:Pudełko"); if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni==""))) and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki==""))) and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki))) and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu==""))) )then if(__FUNKCJA_SPRAWDZANIE)then __FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki) and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); end; else if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu]; local parametry_modul=require("Module:Parametry"); if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then local parametry_modul=require("Module:Parametry"); local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu; local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; tablica_zmiennych.sprawdzenie_dokonane_linku=true; end; table.insert(linkobiekttab,uchwyt_obiektu); if(czy_pobierz)then if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={}; end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},}); end; end; function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz) p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function() local parametry_modul=require("Module:Parametry"); if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then local tablica_zmiennych2={}; tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if((not czy_inna)or(not tablica_zmiennych2))then return;end; local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local JuzPoliczone=function() if(czy_pobierz)then stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false); end; if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end; local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; if(not tab_nazwa_obiektu)then tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={}; tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]; end; local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu]; if(tab_uchwyt)then return true; end; tab_nazwa_obiektu[uchwyt_obiektu]=true; return false; end; if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then local czy_policzone=JuzPoliczone(); if(czy_policzone)then return; end; else JuzPoliczone(); end; stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2); p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]; local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink; local ile_razy=0; if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do if(parametry_obiektu[1]==uchwyt_obiektu)then ile_razy=ile_razy+1; if(ile_razy>1)then break;end; end; end; end if(ile_razy~=1)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu); end; p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"); end; end; else p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; end); end; function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz) local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1]; local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca); ---- local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(uchwyt_obiektu))then local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu; local html_modul=require("Module:Html"); uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true); end; ---- local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); ---- if(parametry_modul.CzyTak(uchwyt_obiektu))then nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil)); if(nazwa_artykulu)then if(nazwa_artykulu~="")then if(not nazwa_ksiazki)then nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; elseif(nazwa_ksiazki=="")then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; end; elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then nazwa_artykulu=""; elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); return; else nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni; nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu; nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu; end; if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni) or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu) or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu) or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz); else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz) p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu); end; KtorySzablonMaZwracacKategorie(uchwyt_obiektu); end; function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej) local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end; local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end; local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki]; if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end; local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki]; if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end; if(nazwa_artykulu)then if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end; local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]; return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany; else return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki; end; end; local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if(not czy_artykul_korzystany)then if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false; else if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true; end; end; else return nil; end; end; if(self.tabela_listy_danych_analizy_ksiazki)then if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; if(tabela_przestrzeni)then local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki]; if(tabela_przestrzeni_ksiazki)then local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki]; if(tabela_ksiazka)then local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu; if(lista_artykolow)then local tabela_artykul=lista_artykolow[nazwa_artykulu]; if(tabela_artykul)then local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron; ---- if(not czy_artykul_korzystany)then if(tabela_artykul.TOCSPIS_FUNCTION)then local wynik=tabela_artykul.TOCSPIS_FUNCTION(); if(wynik)then tabela_artykul.TOCSPIS_FUNCTION=nil; end; end; end; return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true; end; end; end; end; end; else return nil; end; else return nil; end; return true; end; local nazwy_modul=require("Module:Nazwy"); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu) if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then --local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end; tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; end; if(not wartosc_wyniku)then return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna; end; ---- local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if((nazwa_przestrzeni~=nazwy_np_modul.Main) and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior) and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) )then stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; ---- local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local parametry_modul=require("Module:Parametry"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ---- local tekst_rozwiniety_calego_artykulu_ref=nil; local tablica_analizy_obiektow_strony_dany_modul_ref=nil; local tablica_danych_parametrow_szablonu_strony_ref=nil; ---- local function InneInformacjePrzebneDoAnalizowanejKsiazki() if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end; end; local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false; if(not czy_ksiazka_istnieje_w_tablicy)then tablica_ksiazki.czy_spis_analizowano=true; local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp; local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona) local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona]; if(tablica_przestrzeni_strona)then local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona]; if(tablica_przestrzeni_ksiazki_strona)then local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona]; if(tablica_ksiazki_strona)then if(tablica_ksiazki_strona.spis)then nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona; tablica_ksiazki.spis=tablica_ksiazki_strona.spis; tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja; tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu; tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy; tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,}; return 1; end; end; end end; end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis) ---- if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis; local parametry_modul=require("Module:Parametry"); tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis); tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis); end; ---- end); local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres) tablica_ksiazki.spis=tabela_artykulow; if(czy_artykul_korzystany)then tablica_ksiazki.licencja=tabela_licencji_spisu_tresci; end; tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu; tablica_ksiazki.tab_inne_spisy=tab_inne_spisy; tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly; tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil; end; if(tabela_artykulow==0)then if(czy_artykul_korzystany)then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje"); else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; elseif(tabela_artykulow)then if(parametry_modul.TypeTable(tabela_artykulow))then if(adres_ksiazki_glownego_spisu_tresci)then __FUNKCJA_SPISU(tablica_ksiazki,true); local tablica_ksiazki_stara=tablica_ksiazki; local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1]; local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2]; local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3]; if((kod_wyniku==1)or(kod_wyniku==2))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then local nazwa_artykulu=artykul; StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; elseif((kod_wyniku==3)or(kod_wyniku==4))then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul); tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,}; __FUNKCJA_SPISU(tablica_ksiazki,false); return nil,nil,artykul,kod_wyniku; end; else __FUNKCJA_SPISU(tablica_ksiazki,false); end; elseif(tabela_artykulow~=1)then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku,true; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku,true; end; end; else if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); end; end; end; end; end; end; ---- local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki(); if(wynik_bledu)then return wartosc_wyniku;end; local kod_wyniku_przekierowan=kod_wyniku_bazowy; ---- --if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then -- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); --end; ---- if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then ---- nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1]; nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2]; nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3]; nazwa_artykulu=artykul_bazowy; ---- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3]; end; local tabela_artykulow=tablica_ksiazki.spis; if(tabela_artykulow)then local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu; local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy; local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false); if(kod_wyniku)then nazwa_artykulu=artykul; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); end; kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku; end; local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); local PrzekierownieAwaryjne=function() if(not kod_wyniku_przekierowan)then --local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true); local techniczne_modul=require("Module:Techniczne"); local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu); if(strona)then if(strona~=nazwa_modulu)then ---- local tabela_nazw={}; nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw); nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw); nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)); nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa); local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(not wartosc_wyniku)then return wartosc_wyniku; elseif((wartosc_wyniku==0)and(tabela_artykul))then StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); return wartosc_wyniku; end; tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); nazwa_modulu=strona; else return 0; end; end; end; end; local wynik=PrzekierownieAwaryjne(); if(czy_artykul_korzystany)then self.nazwa_modulu_biezaca=nazwa_modulu; end; if(wynik)then return wynik;end; ---- if(czy_artykul_korzystany)then if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni; self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki; self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu; end; end; local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu; -- przydzielanie tablicy if(czy_artykul_korzystany)then artykul_analizowany.artykul_biezacy=true; tablica_ksiazki.ksiazka_analizowana=true; end; --koniec --local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}"); if(not tablica_zmiennych)then tablica_zmiennych={};end; if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end; local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do local CzyLink=element_w_tablicy_obiekt.CzyLink; local CzyNum=element_w_tablicy_obiekt.CzyNum; local wartosc=element_w_tablicy_obiekt[1]; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,}; if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end; end; local function StronaZbiorcza() if(czy_artykul_korzystany)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end; local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); artykul_analizowany.strona_zbiorcza=(wynik and "tak" or ""); return wynik; end; return nil; end; local strona_zbiorcza=StronaZbiorcza(); local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,""); local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); ---- local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony; if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil), nil) else tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref; end; ---- if(not czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then return 0;end; end; if(czy_artykul_korzystany)then if(not tekst_rozwiniety_calego_artykulu)then if(strona_zbiorcza)then self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak"; end; return nil; end; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu); local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu); if(tekst)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu); local tablica_danych_parametrow_szablonu_strony={}; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return true; elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return true; end; end); if(wynik)then break;end; end; end; end; end; local uzyskano_w_wyniku_parsowania_wywolanie_szablonu; local analiza_stron_korzystanych_zbiorczych=nil; local stronastart=nil; ---- local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze; local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu; local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu; ---- local strona_start=stronicowyparser_obiekty_modul.strona_start; local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony; local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne; local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza; ---- local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe; local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe; local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu; local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tabela_elementow_strony_kodow={}; -- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) if(czy_artykul_korzystany)then if(tabela_parametrow_szablonu)then if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then if(strona_start[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"]; stronastart=true; local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or ""; local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC"; if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; stronastart=true; return; elseif(strona_start_inne[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak"; self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak"; stronastart=true; return; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then analiza_stron_korzystanych_zbiorczych=true; local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"]; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"]; if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then return; end; end; end; end; local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:"); if(plik==nil)then if(tabela_parametrow_szablonu)then if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie"); local czy_linkobiekt; local czy_link;local czy_pobierz; local czy_wypowiedzenie_z_parametrami; local czy_linkobiekt_z_parametrami; if(czy_wypowiedzenie)then czy_linkobiekt=false; czy_link=false; czy_pobierz=false; czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]); else czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt"); if(czy_linkobiekt)then czy_link=true; czy_pobierz=false; czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]); else czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link"); czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil; end; end; if((not czy_link)and(not czy_pobierz))then local wartosc_elementu;local numer_uchwytu; if(not czy_wypowiedzenie_z_parametrami) then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; else local rodzaj=tabela_parametrow_szablonu["rodzaj"]; if(rodzaj)then wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil; if(wartosc_elementu)then numer_uchwytu=tablica_obiekty[5]; end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; end; elseif(czy_artykul_korzystany)then if(czy_link)then local wartosc_elementu; if(not czy_linkobiekt_z_parametrami)then wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania]; else local typ=tabela_parametrow_szablonu["typ"]; if(typ)then typ=format_elementowy_referencji_obiektowy[typ] and typ or nil; if(typ)then wartosc_elementu=mw.getContentLanguage():ucfirst(typ); end; end; end; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; end; end; elseif(czy_pobierz)then local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; if(wartosc_elementu)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true); return; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; end; return; elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania]; local wartosc_elementu;local numer_uchwytu; if(tab_wartosc_elementu)then wartosc_elementu=tab_wartosc_elementu[1]; numer_uchwytu=tab_wartosc_elementu[2]; end; local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(czy_artykul_korzystany)then if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then if(uchwyt_obiektu and (uchwyt_obiektu~=""))then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; end; end; local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu); local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu); local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess); if(tekst)then local czy_szablon_wszystko=false; tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod) if(czy_bez_preprocess)then return nil;end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if( (tab_szablony[nazwa_szablonu]) or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu]) or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu]) )then if(not czy_artykul_korzystany)then tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni; tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "")) if(self)then local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz"); if(czy_link_lub_pobierz)then p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu); end; end; end; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end; return nil; end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- instrukcje warunkowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- wywołania ramek Lua w Scribunto return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- tagi szablonowe; return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true); end); czy_szablon_wszystko=czy_szablon_wszystko or true; if(wynik)then return wynik;end; elseif(obiekt=="ZMIENNA")then czy_szablon_wszystko=czy_szablon_wszystko or true; local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$"); if(zawartosc)then zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}"); return "{{(((}}"..zawartosc.."{{)))}}"; end; end; end); if((czy_szablon_wszystko)and(not bez_preprocess))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; --local __metatabelka=getmetatable(tabela_parametrow_szablonu); --if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end; stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany); end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or ""); end; end; p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); return; else if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; return; elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or ""; local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or ""; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "") end; end; p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie); self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil; if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true; self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; else self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil; end; return; else local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ""; local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ""; local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki; local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony; self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt; end; end; if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania]) or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]) )then if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); else p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie); end; return; elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie); return; end; end; end; end; end; end; end; end; ---- local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer) stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego); end; local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer); end; end; IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu); ---- local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {}; tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; ---- local wiki_modul=require("Module:Wiki"); tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},}; ---- if(czy_artykul_korzystany)then if(analiza_stron_korzystanych_zbiorczych)then local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst"); tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end; local strona; if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end; ---- if(czy_artykul_korzystany)then local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu"); stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych); tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu; end; ---- local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca) return function() if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)) or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then ---- local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil; ---- tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false); ---- local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki) if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu) if(czy_artykul_korzystany)then if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; else stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki); if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or ""); end; end; end; local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu() return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"); end; local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu; local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron"); local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka]; tablica_naglowka_obiekty.uchwyty_bez_numeracji={}; local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; return true; end; end; end; local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca); local wynik=czy_spis_function(); if(not czy_artykul_korzystany)then if(not wynik)then tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function; end; end; StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu); if(czy_artykul_korzystany)then self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]; self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki]; self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki]; --self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych; end; if(not czy_artykul_korzystany)then tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych; if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end; table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu); else local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista; if(dane_zebrane_ze_stron_lista)then for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil; tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil; end; end; tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil; end; return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true; end; return p; jku7lyw0yls0twuzwb8bwjp9gq2jqcx Moduł:StronicowyParser/Rozdziały 828 58234 551284 551191 2026-08-10T20:59:28Z Persino 2851 551284 Scribunto text/plain local p={}; function p.NapisWprowadzeniaTekstu(rozdzial,poziom) local naglowek; poziom=poziom or 1; poziom=(poziom>0)and poziom or 1; if(poziom<=6)then local str_poziom=mw.ustring.rep("=",poziom); naglowek="\n"..str_poziom..rozdzial..str_poziom.."\n"; else naglowek="\n<h6 class=\"mw-hnumber mw-hnumber-"..poziom.."\">"..rozdzial.."</h6>\n"; end; return naglowek; end; function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod) if(mw.ustring.match(zawartosc,"\n"))then return false;end; local szablonowe_modul=require("Module:Szablonowe"); local kod_norma_wzoru_obiektu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod); tekst='\n'..tekst..'\n'; if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end; if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end; return false; end; function p.NapisWprowadzeniaTekstuHNumer(parametr) local naglowek,poziom=p.PodajNapisPoziomuWprowadzeniaTekstu(parametr); if(not naglowek)then return nil;end; if(poziom<=6)then return "<h"..poziom..">"..naglowek.."</h"..poziom..">"; else return "<h6 class=\"mw-hnumber mw-hnumber-"..poziom.."\">"..naglowek.."</h6>"; end; end; function p.PodajNapisPoziomuWprowadzeniaTekstu(linia) if(mw.ustring.match(linia,"^%s*=*%s*$"))then return nil,0; end; local rowna_lewy=mw.ustring.match(linia,"^(=+)"); local rowna_prawy=mw.ustring.match(linia,"(=+)%s*$"); if((rowna_lewy)and(rowna_prawy))then local min_rowna=math.min(#rowna_lewy,#rowna_prawy); local str_min_rowna=mw.ustring.rep("=",min_rowna); local naglowek=mw.ustring.match(linia,"^%s*"..str_min_rowna.."([^\n]*[^\n%=][^\n]*)"..str_min_rowna.."%s*$"); if(not naglowek)then return nil,0; end; local naglowek=mw.text.trim(naglowek); return naglowek,min_rowna; else return nil,0; end; end; function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia) local liczba1,zawartosc,liczba2=mw.ustring.match(linia,"<[Hh](%d+)[^<>]*>(.-)</[Hh](%d+)>"); if(not liczba1)then return nil;end; if((#liczba1==1)and(#liczba2==1)and(liczba1==liczba2))then local liczba1=tonumber(liczba1); if(not liczba1)then return nil;end; if((liczba1<1)or(liczba1>6))then return nil;end; return zawartosc,liczba1; end; return nil; end; function p.CzyJestNapisWprowadzeniaTekstu(zawartosc) return mw.ustring.match(zawartosc,"^=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*\n") or mw.ustring.match(zawartosc,"\n=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*\n") or mw.ustring.match(zawartosc,"\n=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*$") or mw.ustring.match(zawartosc,"^=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*$"); end; function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc) return mw.ustring.match(zawartosc,"^[;%*:#]+") or mw.ustring.match(zawartosc,"\n[;%*:#]+"); end; function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz) local czy_naglowek=p.CzyJestNapisWprowadzeniaTekstu(wiersz); if(czy_naglowek)then return true,true;end; --czy_naglowek=mw.ustring.match(wiersz,"<[Hh]%d+[^<>]*>(.+)</[Hh]%d+>"); local czy_naglowek=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz) and true or false; return czy_naglowek,false; end; function p.WierszHNumer(tekst) local tekst=mw.ustring.gsub(tekst,"(<[Hh](%d+)[^<>]*>)(.-)(</[Hh]%2%s*>)",function(lewy,poziom,tekst,prawy) poziom=tonumber(poziom) or 0; if((poziom>=1)and(poziom<=6))then tekst=mw.ustring.gsub(tekst,"\n"," "); return "\n"..lewy..tekst..prawy.."\n"; end; end); return tekst; end; function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy; local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy; ----- local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); ----- local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iter do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then return true; end; end); if(wynik)then return wynik;end; elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then return true; --elseif((obiekt=="MATH")or(obiekt=="ŹRÓDŁO"))then --return true; end; end; return false; end; function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul) local szablonowe_modul=require("Module:Szablonowe"); ----- local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iter do if((obiekt=="INNEPRE")or(obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="MATH")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU"))then return true; end; end; return false; end; function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja) local czy=mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s+") or mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s*$"); if(czy)then local num=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)"); local tab=mw.text.split(num,"%.",false); if(#tab==1)then if(mw.ustring.match(num,"^%d+$"))then return rozdzial_z_numeracja,""; end; else if(tab[#tab]=="")then tab[#tab]=nil;end; end; local tak=true; for i=1,#tab,1 do tak=tak and mw.ustring.match(tab[i],"^%d+$"); if(not tak)then break;end; end; if(tak)then local numeracja=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)%s*"); local rozdzial_bez_numeracji=mw.ustring.gsub(rozdzial_z_numeracja,"^[%d%.]+%s*",""); return rozdzial_bez_numeracji,numeracja; end; end; return rozdzial_z_numeracja,""; end; function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tab_kom=stronicowyparser_obiekty_modul.szablony_kompletowania_stron_woluminu; return tab_kom[nazwa_szablonu]; end; function p.UruchamianieAnalizatoraSpisuRzeczyStrony() return true; end; function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local rozdzial=mw.ustring.match(linia,"^('+..-:[%s_]-'*)[%s_]*$") or ((not mw.ustring.match(linia,"^%s+"))and(mw.ustring.match(linia,"^(..-:[%s_]-'*)[%s_]*$"))); if(rozdzial)then return rozdzial,true; else local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local spis_tresci=stronicowyparser_analizaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); if(spis_tresci)then return linia,true; else local rozdzial,main=nil,nil; if(not mw.ustring.match(linia,"^'+.-[^'%s].-'+.-[^'%s]%s*$"))then rozdzial,main=mw.ustring.match(linia,"^('+[%s_]*(..-)[%s_]*'*)[%s_]*$"); end; if(rozdzial)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local rozdzial_main=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(rozdzial_main,"^.*![%s_]*'*[%s_]*$"))then if(mw.ustring.match(rozdzial_main,"^[^']-$"))then if((not mw.ustring.match(rozdzial_main,"^%u[%s_]"))and(not mw.ustring.match(rozdzial_main,"[%s_]%u$")))then return rozdzial,true; end; end; end; else local czy_nie_rozdzial_zerowy=mw.ustring.match(linia,"%.%s*$"); if(czy_nie_rozdzial_zerowy)then return linia,false;end; end; return nil; end; end; end; function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) if((not przedrotek_listy)or(#przedrotek_listy==0))then return false;end; local czy_dwukropki=mw.ustring.match(przedrotek_listy,"^:+$"); if(not czy_dwukropki)then return false;end; local czy_miedzy_cudzyslowami=mw.ustring.match(linia,"^%s*''+.+'*%s*$"); if(not czy_miedzy_cudzyslowami)then return false;end; if(not z_parametrami_linkowymi)then return true;end; local szablonowe_modul=require("Module:Szablonowe"); local czy_sa_kody=mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()); if(not czy_sa_kody)then return true;end; local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW"))then local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if((tab_pozycja_elementow_w_spisie_rzeczy)and(numer_rodzaju_artykulu==1))then return false; end; end; end; return true; end; function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty) local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty'); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local numer_rozdzialu=znaczniki_wprowadzenia_tekstu[nazwa]; if((atrybuty)and(numer_rozdzialu>=6))then local klasa=atrybuty["class"]; if(klasa)then local mw_hnumber_liczba=mw.ustring.match(klasa,"^%s*mw%-hnumber%-(%d+)%s*$") or mw.ustring.match(klasa,"^%s*mw%-hnumber%-(%d+)%s+") or mw.ustring.match(klasa,"%s+mw%-hnumber%-(%d+)%s+") or mw.ustring.match(klasa,"%s+mw%-hnumber%-(%d+)%s*$"); mw_hnumber_liczba=tonumber(mw_hnumber_liczba) or 6; mw_hnumber_liczba=(mw_hnumber_liczba>6) and mw_hnumber_liczba or 6; numer_rozdzialu=mw_hnumber_liczba or numer_rozdzialu; end; end; return numer_rozdzialu; end; function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc) local numeracja,rozdzial=mw.ustring.match(zawartosc,"^%s*([%d%.]*)%s*(.-)%s*$"); return numeracja,rozdzial; end; function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local zacznij;local wprowadzenie;local zawsze=false;local ostatnie=false;local bez_kropki=nil;local spac=nil;local nie_rozdzial=nil;local nie_numerowany=nil; local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty'); local parametry_modul=require("Module:Parametry"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści"); local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local techniczne_modul=require("Module:Techniczne"); local specjalne_modul=require("Module:Specjalne"); local strony_modul=require("Module:Strony"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy; local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local maksymalny_rozmiar_rozdzialu_zerowego=70; return function(linia,tak_ce_spis_tresci) ---- local rozdzial=nil;local numeracja=nil; local poczatek,rozdzial_z_numeracja=mw.ustring.match(linia,"^([#:%*;]+)%s*('*%s*[%d%.]*%s*.-%s*'*)%s*$"); local rozdzial_z_numeracja_nie_przetworzone=nil; ----- ---- if(not poczatek and not rozdzial_z_numeracja)then rozdzial_z_numeracja=mw.ustring.match(linia,"^([%d%.]+%s*.-)%s*$") or mw.ustring.match(linia,"^'+(%s*[%d%.]+%s*.-)%s*'*%s*$") if(rozdzial_z_numeracja)then poczatek=""; rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja); rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)",""); rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$",""); rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); else local function LiniaCydzyslow(linia) local linia_wew_cudz=mw.ustring.match(linia,"^'+%s*(.-[^']+.-)%s*'+%s*$") if(not linia_wew_cudz)then return false;end; return not (mw.ustring.match(linia_wew_cudz,'^%u[%u%s]*$') and((mw.ustring.match(linia_wew_cudz,"%s%u%s"))or(mw.ustring.match(linia_wew_cudz,"^%u%s"))or(mw.ustring.match(linia_wew_cudz,"%s%u$")))) end; if(LiniaCydzyslow(linia))then rozdzial=linia; poczatek=""; numeracja=""; else local url_iter=mw.ustring.gmatch(linia,"(%S+)"); local czy_rozdzial=false; for url in url_iter do czy_rozdzial=czy_rozdzial or strony_modul.SprawdzanieURL(url); if(czy_rozdzial)then break; end; end; if(czy_rozdzial)then poczatek=""; numeracja=""; rozdzial=linia; end; end; end; else rozdzial_z_numeracja_nie_przetworzone=rozdzial_z_numeracja; rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja); rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)",""); rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$",""); rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); end; local ze_specialnymi_obiektami=((rozdzial) and true or false);local czy_centrowanie=false;local czy_znaczniki_hn=false;local tekst; local nazwa,zawartosc,atrybuty; if(rozdzial)then tekst=rozdzial;else tekst=linia;end; ---- local function WykluczenieNieodpowiednichNormSzablonowych(rozdzial) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(rozdzial,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="GALERIA")or(obiekt=="ŹRÓDŁO")or(obiekt=="PRE")or(obiekt=="INNEPRE")or(obiekt=="WIKITABELA")or(obiekt=="MAPAOBRAZU"))then return nil; elseif(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(stronicowyparser_obiekty_modul.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego[nazwa_szablonu])then return true; end; end); if(wynik)then return nil;end; end; end; return true; end; local FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu=function(wartosc) if(mw.ustring.match(wartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end; if(mw.ustring.match(wartosc,"!%s*'*%s*$"))then return nil;end; numeracja,rozdzial=p.NumeracjaOrazTekstWprowadzeniaTekstu(wartosc); if(rozdzial)then local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial); if(not wynik)then numeracja=nil;rozdzial=nil; return nil; end; end; end; local function NiestardardoweSzablonoweWprowdzeniaTekstu(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(czy_ce)then local wartosc=tabela_parametrow_szablonu[czy_ce]; if(wartosc)then return FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu(wartosc); end; return nil; end; end; local function NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty) if(zawartosc)then if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then return FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu(zawartosc); end; end; return nil; end; ---- local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) --- local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(czy_ce)then ze_specialnymi_obiektami=true; czy_centrowanie=true; NiestardardoweSzablonoweWprowdzeniaTekstu(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow); --if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end; return true; elseif((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then ze_specialnymi_obiektami=true; if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end; return true; end; end); if(wynik)then return;end; elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end; ze_specialnymi_obiektami=true; return nil; elseif((obiekt=="PRE")or(obiekt=="MATH")or(obiekt=="ŹRÓDŁO")or(obiekt=="INNEPRE"))then if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end; ze_specialnymi_obiektami=true; return nil; elseif(obiekt=="ZNACZNIK")then nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then if(nazwa=="center")then ze_specialnymi_obiektami=true; czy_centrowanie=true; NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty); --if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end; return nil; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then ze_specialnymi_obiektami=true; czy_znaczniki_hn=true; NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty); return nil; end; end; end; return szablon; end); for szablon,obiekt,kod in iter do end; rozdzial=rozdzial and parametry_modul["Odstępy"](rozdzial) or nil; poczatek=poczatek and parametry_modul["Odstępy"](poczatek) or nil; numeracja=numeracja and parametry_modul["Odstępy"](numeracja) or nil; if(not ze_specialnymi_obiektami)then local rozdzial,czy_standardowe_rozdzialy=p.CzyZerowyNapisWprowadzeniaTekstu(rozdzial or linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then if(#rozdzial<=maksymalny_rozmiar_rozdzialu_zerowego)then if(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$"))then return linia,rozdzial,0,nil,numeracja; else return nil; end; else local czy_poczatek_niepusty=parametry_modul.CzyTak(poczatek); local czy_numeracja_niepusta=parametry_modul.CzyTak(numeracja); if(((not czy_poczatek_niepusty)or(#poczatek==0))and((not czy_numeracja_niepusta)or(#numeracja==0)))then return nil; elseif(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$"))then return linia,rozdzial,0,nil,numeracja; else return nil; end; end; else return nil; end; elseif(czy_centrowanie)then if(tak_ce_spis_tresci)then if((rozdzial)and(numeracja))then if((not parametry_modul.CzyTak(numeracja))and(not parametry_modul.CzyTak(rozdzial)))then return nil,nil,nil,nil; end; return linia,rozdzial,2,nil,numeracja,true; end; end; return nil; elseif(czy_znaczniki_hn)then if((rozdzial)and(numeracja))then if((not parametry_modul.CzyTak(numeracja))and(not parametry_modul.CzyTak(rozdzial)))then return nil,nil,nil,nil; end; local numer_rozdzialu=p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); return linia,rozdzial,numer_rozdzialu,nil,numeracja; end; elseif(rozdzial)then local czy_numeracja_niepusta=parametry_modul.CzyTak(numeracja); local czy_rozdzial_niepusty=parametry_modul.CzyTak(rozdzial); if((not czy_numeracja_niepusta)and(not czy_rozdzial_niepusty))then return nil; end; if(#rozdzial<=maksymalny_rozmiar_rozdzialu_zerowego)then local czy_pominac_ten_rozdzial_jako_rozdzial=rozdzial_z_numeracja_nie_przetworzone and p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(poczatek,rozdzial_z_numeracja_nie_przetworzone,false,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) or nil; if(not czy_pominac_ten_rozdzial_jako_rozdzial)then if((#poczatek>0)or(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$")))then return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; else return nil; end; else return nil; end; else local czy_poczatek_niepusty=parametry_modul.CzyTak(poczatek); if(((not czy_poczatek_niepusty)or(#poczatek==0))and((not czy_numeracja_niepusta)or(#numeracja==0)))then return nil; else local czy_pominac_ten_rozdzial_jako_rozdzial=rozdzial_z_numeracja_nie_przetworzone and p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(poczatek,rozdzial_z_numeracja_nie_przetworzone,false,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) or nil; if(not czy_pominac_ten_rozdzial_jako_rozdzial)then if((#poczatek>0)or(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$")))then return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; else return nil; end; else return nil; end; end; end; else return nil; end; return nil; end; end; function p.TekstPoNapisieWprowadzeniaTekstuStrony(frame) local strona=frame.args[1]; local id_rozdzialu1=frame.args[2] or ""; local id_rozdzialu2=frame.args[3] or ""; strona=frame:preprocess(strona); local title=mw.title.makeTitle('',strona); if((not title)or(not title.exists))then return nil; end; local tekst=title:getContent(); if(not tekst)then return nil;end; return p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2); end; function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst) tekst=mw.ustring.gsub(tekst,"^[%s_]+",""); tekst=mw.ustring.gsub(tekst,"[%s_]+$",""); tekst=mw.ustring.gsub(tekst,"[%s_]+","_"); return tekst; end; function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame) local strona=frame.args[1]; local id_rozdzialu=frame.args[2] or ""; strona=frame:preprocess(strona); local title=mw.title.makeTitle('',strona); if((not title)or(not title.exists))then return nil; end; local tekst=title:getContent(); if(not tekst)then return nil;end; id_rozdzialu=frame:preprocess(id_rozdzialu); local specjalne_modul=require("Module:Specjalne"); id_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu); id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu); local html_modul=require("Module:Html"); id_rozdzialu=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu); tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>",""); tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1"); --tekst=mw.ustring.gsub(tekst,"\n\n","\n\n"); tekst=p.WierszHNumer(tekst); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_rozdzialy={}; local specjalne_modul=require("Module:Specjalne"); for wiersz in iter do local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz); if(czy_naglowek)then local nazwa_rozdzialu,poziom_rozdzialu; if(czy_naglowek_wiki)then nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz); else nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz); end; nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu); local nazwa_rozdzialu_aktualna=nazwa_rozdzialu; nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu); nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu); nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu); local c=1; for i=1,#tab_rozdzialy,1 do if(tab_rozdzialy[i]==nazwa_rozdzialu)then c=c+1; end; end; if(c>1)then nazwa_rozdzialu=nazwa_rozdzialu.."_"..c; end; table.insert(tab_rozdzialy,nazwa_rozdzialu); if(id_rozdzialu==nazwa_rozdzialu)then return nazwa_rozdzialu_aktualna; end; end; end; return nil; end; function p.NumerSekcjiStrony(frame) local strona=frame.args[1]; local id_rozdzialu=frame.args[2] or ""; strona=frame:preprocess(strona); local title=mw.title.makeTitle('',strona); if((not title)or(not title.exists))then return nil; end; local tekst=title:getContent(); if(not tekst)then return nil;end; id_rozdzialu=frame:preprocess(id_rozdzialu); local specjalne_modul=require("Module:Specjalne"); id_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu); id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu); local html_modul=require("Module:Html"); id_rozdzialu=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu); tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>",""); tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1"); --tekst=mw.ustring.gsub(tekst,"\n\n","\n\n"); tekst=p.WierszHNumer(tekst); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_rozdzialy={}; local ile=1; for wiersz in iter do local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz); if(czy_naglowek)then local nazwa_rozdzialu,poziom_rozdzialu; if(czy_naglowek_wiki)then nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz); else nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz); end; nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu); nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu); nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu); nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu); local c=1; for i=1,#tab_rozdzialy,1 do if(tab_rozdzialy[i]==nazwa_rozdzialu)then c=c+1; end; end; if(c>1)then nazwa_rozdzialu=nazwa_rozdzialu.."_"..c; end; table.insert(tab_rozdzialy,nazwa_rozdzialu); if(id_rozdzialu==nazwa_rozdzialu)then return ile; end; ile=ile+1; end end; return nil; end; function p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2) local frame=mw.getCurrentFrame(); local specjalne_modul=require("Module:Specjalne"); local html_modul=require("Module:Html"); id_rozdzialu1=frame:preprocess(id_rozdzialu1); id_rozdzialu1=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu1); id_rozdzialu1=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu1); id_rozdzialu1=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu1); id_rozdzialu2=frame:preprocess(id_rozdzialu2); id_rozdzialu2=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu2); id_rozdzialu2=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu2); id_rozdzialu2=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu2); tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>",""); tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1"); --tekst=mw.ustring.gsub(tekst,"\n\n","\n\n"); tekst=p.WierszHNumer(tekst); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_rozdzialy={}; local str="" local nazwa_rozdzialu_aktualna; local poziom_rozdzialu_aktualny; for wiersz in iter do local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz); if(czy_naglowek)then local nazwa_rozdzialu,poziom_rozdzialu; if(czy_naglowek_wiki)then nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz); else nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz); end; nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu); nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu); nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu); nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu); local c=1; for i=1,#tab_rozdzialy,1 do if(tab_rozdzialy[i]==nazwa_rozdzialu)then c=c+1; end; end; if(c>1)then nazwa_rozdzialu=nazwa_rozdzialu.."_"..c; end; table.insert(tab_rozdzialy,nazwa_rozdzialu); if(((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1)) and((((id_rozdzialu2=="")or(not id_rozdzialu2))and(poziom_rozdzialu<=poziom_rozdzialu_aktualny))or(nazwa_rozdzialu==id_rozdzialu2)))then return str; end; if((id_rozdzialu1~="")and(nazwa_rozdzialu==id_rozdzialu1))then nazwa_rozdzialu_aktualna=nazwa_rozdzialu; poziom_rozdzialu_aktualny=poziom_rozdzialu; str=""; elseif(id_rozdzialu1=="")then nazwa_rozdzialu_aktualna=""; poziom_rozdzialu_aktualny=0; if(id_rozdzialu2=="")then return str; elseif(nazwa_rozdzialu==id_rozdzialu2)then return str; else str=(str~="")and (str.."\n"..wiersz) or wiersz; end; else str=(str~="")and (str.."\n"..wiersz) or wiersz; end; else str=(str~="")and (str.."\n"..wiersz) or wiersz; end; end; if((id_rozdzialu1)and(id_rozdzialu1==""))then return str; elseif((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))then return str; end; return ""; end; function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod) if((tablica_danych_parametrow_szablonu_strony)and(kod))then local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-5]; if(tablica_danych_parametrow_szablonu_strony_numer)then local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod]; if(tablica_danych_parametrow_szablonu_strony_numer_kod)then return tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy; end; end; end; local szablonowe_modul=require("Module:Szablonowe"); ---- local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local ktore=szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu[nazwa_szablonu]; if(not ktore)then return;end; local tab=mw.text.split(tostring(ktore),"%s*;%s*",false); local wynik=""; for _,num in pairs(tab)do local numer_parametru=tonumber(num) or num; for parametr,wartosc in pairs(tabela_parametrow_szablonu)do if(parametr==numer_parametru)then wynik=(wynik or "")..wartosc; end; end; end; return wynik; end); if((tablica_danych_parametrow_szablonu_strony)and(kod)and(wynik))then if(not tablica_danych_parametrow_szablonu_strony[-5])then tablica_danych_parametrow_szablonu_strony[-5]={};end; local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-5]; if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end; local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod]; tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy=wynik; end; return wynik; end; function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod) if((tablica_danych_parametrow_szablonu_strony)and(kod))then local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-6]; if(tablica_danych_parametrow_szablonu_strony_numer)then local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod]; if(tablica_danych_parametrow_szablonu_strony_numer_kod)then return tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy; end; end; end; local szablonowe_modul=require("Module:Szablonowe"); local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_z_dodatkiem_obiektowym=stronicowyparser_obiekty_modul.szablony_z_dodatkiem_obiektowym; local dodatek=szablony_z_dodatkiem_obiektowym[nazwa_szablonu]; if(dodatek)then local techniczne_modul=require("Module:Techniczne"); for name,value in pairs(tabela_parametrow_szablonu)do local name=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](name); local value=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](value); dodatek=mw.ustring.gsub(dodatek,"%$%("..name.."%)",value); end; return dodatek; end; end); if((tablica_danych_parametrow_szablonu_strony)and(kod)and(wynik))then if(not tablica_danych_parametrow_szablonu_strony[-6])then tablica_danych_parametrow_szablonu_strony[-6]={};end; local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-6]; if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end; local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod]; tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy=wynik; end; return wynik; end; function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE) local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji) return "\n\n "; end,nil,nil, function(szablon,obiekt,kod,poziom_iteracji) if(poziom_iteracji==0)then if(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa=="br")or(nazwa=="hr"))then return true; end; elseif(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) ---- if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then return true; end; end); if(wynik)then return wynik;end; end; end; return nil; end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); return tekst; end; function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE) local CzySpecjalnaLinia=function(linia) local czy_specjalna_linia=mw.ustring.match(linia,"^[%*,;:#]+") or mw.ustring.match(linia,"^%s*$") or mw.ustring.match(linia,"^%-%-%-%-"); if(not czy_specjalna_linia)then if(mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))then return true; end; end; return czy_specjalna_linia; end; ---- local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); local CzyLiniaZeSpecjalnymiSzablonami=function(linia) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_w_nie_w_tej_samej_linii=stronicowyparser_obiekty_modul.szablony_w_nie_w_tej_samej_linii; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nazwa_modulu,tablica_obiektow_strony_dany_modul_uzyskany); for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(szablony_w_nie_w_tej_samej_linii[nazwa_szablonu])then return true; end; end); if(wynik)then return wynik;end; end; end; return nil; end; ---- --tekst=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony); ---- local tab_linie_tekstu=mw.text.split(tekst,"\n"); if(#tab_linie_tekstu==0)then return "";end; local tekst_nowy=tab_linie_tekstu[1]; local czy_linia_poprz=CzySpecjalnaLinia(tekst_nowy) or CzyLiniaZeSpecjalnymiSzablonami(tekst_nowy); if(not czy_linia_poprz)then tekst_nowy=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst_nowy,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE); end; for i=2,#tab_linie_tekstu,1 do local linia=tab_linie_tekstu[i]; local aktualna_specjalna_linia=CzySpecjalnaLinia(linia) or CzyLiniaZeSpecjalnymiSzablonami(linia); if(not aktualna_specjalna_linia)then linia=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE); end; if((not czy_linia_poprz)and(not aktualna_specjalna_linia))then --local czy_wprowadzenie=mw.ustring.match(linia,"^>") local tekst_nowy2=mw.ustring.match(tekst_nowy,"^(.*\n)[^%S\n]*\n[^%S\n]*$"); tekst_nowy=(tekst_nowy2 or tekst_nowy)..((tekst_nowy2) and "" or " ")..linia; else tekst_nowy=tekst_nowy.."\n"..linia; end; czy_linia_poprz=aktualna_specjalna_linia; end; return tekst_nowy; end; function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) local nazwy_modul=require("Module:Nazwy"); tablica_analizy_obiektow_strony_dany_modul=tablica_analizy_obiektow_strony_dany_modul or {}; tablica_danych_parametrow_szablonu_strony=tablica_danych_parametrow_szablonu_strony or {}; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local stronicowyparser_analizaaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local html_modul=require("Module:Html"); local szeregi_modul=require("Module:Szeregi"); local szablony_do_usuwania_z_tekstu=stronicowyparser_obiekty_modul.szablony_do_usuwania_z_tekstu; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej=(nazwa_przestrzeni and nazwa_przestrzeni_ksiazki and nazwa_ksiazki and nazwa_spisu_tresci) and nazwy_modul["NazwaModułu"](((nazwy_np_modul.Template~=nazwa_przestrzeni) and (nazwa_przestrzeni) or ""),nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci) or nil; local pelna_nazwa_spisu_tresci_szablonowa=((pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej)and(((nazwa_przestrzeni=="") and ":" or "")..pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej) or nil); local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu(); local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji) local tab_obiekt=tab_analiza[obiekt]; if(not tab_obiekt)then return;end; for _,wartosc in pairs(tab_obiekt)do local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc]; if(element_wartosc)then element_wartosc[kod]=nil; end; end; end; local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji) tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil; end; --local tab_nazwa_spisow_przekierowaniowych={}; if(czy_dalej_rozwazac_zakodowane)then ---- local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local tab_szablony_bez_generowania_napisowego=stronicowyparser_obiekty_modul.szablony_bez_generowania_napisowego; local szablony_nie_typowo_linkowe=stronicowyparser_obiekty_modul.szablony_nie_typowo_linkowe; local znaczniki_szablonowe=stronicowyparser_obiekty_modul.znaczniki_szablonowe; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; ---- local function UsuwanieNowychLiniiZnacznikowe(szablon) local tak=nil; szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji) if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) ----- if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then if(poziom_iteracji==0)then tak=true;end; return " "; end; end); if(wynik)then return wynik,nil,true;end; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa=="br")or(nazwa=="hr"))then if(poziom_iteracji==0)then tak=true;end; return " ",nil,true; end; end; return nil,true; end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); return szablon,tak; end; local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod) local czy_tak=false; local szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji) if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(czy_ce)then local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce]; if(szablon_spis_tresci_zawartosc)then czy_tak=czy_tak or true; return szablon_spis_tresci_zawartosc; end; end; return nil; end); if(wynik)then return wynik,nil,true;end; return nil,true; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then czy_tak=czy_tak or true; return zawartosc,nil,true; end; end; end; return nil,true; end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); return szablon,czy_tak; end; local Modyfikacja=function(szablon,obiekt,kod) local czy_tak=false; local szablon,czy_tak1=UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu(szablon,obiekt,kod); czy_tak=czy_tak or czy_tak1; local szablon,czy_tak2=UsuwanieNowychLiniiZnacznikowe(szablon); czy_tak=czy_tak or czy_tak2; local szablon,ile=mw.ustring.gsub(szablon,"\n"," "); czy_tak=czy_tak or (ile>0); return szablon,czy_tak; end; local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3) if(obiekt=="SZABLON")then local tabela_parametrow_szablonu=parametr1; local nazwa_szablonu=parametr2; local tabela_modyfikatorow=parametr3; if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then local wynik,czy_tak=Modyfikacja(szablon,obiekt,kod); if(not czy_tak)then return nil,true;end; return wynik,true; end; elseif(obiekt=="ZNACZNIK")then local nazwa=parametr1; local zawartosc=parametr2; local tab_atrybuty=parametr3; if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then local wynik,czy_tak=Modyfikacja(szablon,obiekt,kod); if(not czy_tak)then return nil,true;end; return wynik,true; end; end; end; ---- local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); --- --local tab_nazwa_spisow_przekierowaniowych={}; --- local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie) local spacja=" "; local tab_spacja={ ["nbsp"]=spacja, ["#32"]=spacja, ["#x20"]=spacja, }; komorka=mw.ustring.gsub(komorka,"&([^&;]+);",tab_spacja); local komorka_stara=komorka; if(not nie_trimowanie)then komorka=mw.text.trim(komorka); end; if(mw.ustring.match(komorka_stara,"^%s*[#%*:;>]"))then komorka=" "..komorka;end; return ((not nie_trimowanie)and ("\n\n"..komorka.."\n") or komorka); end; ---- local function ZamienNaKody(zawartosc,czy_szablon) local function Linie(wzor) zawartosc=mw.ustring.gsub(zawartosc,wzor,function(a,b) return "&#"..mw.ustring.byte(a)..";"..(b or ""); end); end; if(not (mw.ustring.sub(zawartosc,1,1)=="\n"))then Linie("^([=%*#:;])"); end; local len=mw.ustring.len(zawartosc); if(not (mw.ustring.sub(zawartosc,len,len)=="\n"))then Linie("([=])([^%S\n]*)$"); end; return zawartosc; end; tekst_rozwiniety_calego_artykulu=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst) if(obiekt=="SZABLON")then local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=parametr1,parametr2,parametr3; local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local numer_parametru=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(numer_parametru)then local parametr=tabela_parametrow_szablonu[numer_parametru]; if(parametr)then local czy_modyfikacja=false; szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod) if(obiekt=="ZNACZNIK")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="div")then if(p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(parametr,zawartosc,obiekt,kod))then czy_modyfikacja=true; return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or ""; end; end; end; return nil,true; end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); if(czy_modyfikacja)then return szablon; end; end; end; local function AnalizaSzablonu(szablon) local wynik=p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod); if(wynik)then return wynik;end; if(szablony_do_usuwania_z_tekstu[nazwa_szablonu])then return "";end; local czy_szablony_bez_generowania_napisowego=tab_szablony_bez_generowania_napisowego[nazwa_szablonu]; if(czy_szablony_bez_generowania_napisowego)then return "";end; if(szablony_nie_typowo_linkowe[nazwa_szablonu])then return "";end; --if(mw.ustring.match(nazwa_szablonu,"/"))then return "";end; end; local szablon2=AnalizaSzablonu(szablon); if(szablon2)then return szablon2;end; local czy_center; szablon,czy_center=UsuwanieZnacznikowe(szablon2 or szablon,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) or szablon2; if(szablon)then local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1]; if(tablica_danych_parametrow_szablonu_strony_numer)then local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod]; if(tablica_danych_parametrow_szablonu_strony_numer_kod)then tablica_danych_parametrow_szablonu_strony_numer_kod.parametry=nil; end; end; local wynik,tabela_parametrow_szablonu=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(szablon_ce)then local zawartosc=tabela_parametrow_szablonu[szablon_ce]; if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then return zawartosc,tabela_parametrow_szablonu; end; end; return nil,tabela_parametrow_szablonu; end); if(wynik)then return wynik;end; tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; return nil; elseif(czy_center)then local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(szablon_ce)then local zawartosc=tabela_parametrow_szablonu[szablon_ce]; if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then return zawartosc; else return nil; end; else return nil; end; end; local znacznik_numer=znaczniki_szablonowe[nazwa_szablonu]; if(znacznik_numer)then local parametr=tabela_parametrow_szablonu[znacznik_numer]; if(parametr)then return ZamienNaKody(parametr,true); end; end; end; local wynik=FuncSzablon(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow); if(wynik)then return wynik,nil,true;end; return nil,true; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3; if((nazwa~="center")and(not znaczniki_wprowadzenia_tekstu[nazwa]))then if((nazwa~="ref")and(nazwa~="br")and(nazwa~="hr"))then local fun=function() if(nazwa~="div")then return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or ""; elseif((zawartosc)and(zawartosc~=""))then if(not p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod))then local ile1;local ile2; zawartosc,ile1=mw.ustring.gsub(zawartosc,"^([^\n]+\n)",function(s) if(not mw.ustring.match(s,"^%s*$"))then return PrzetwarzanieZnacznikowe(s,true).."\n\n";end; return "\n"; end); zawartosc,ile2=mw.ustring.gsub(zawartosc,"([^\n]+)$",function(s) if(not mw.ustring.match(s,"^%s*$"))then return "\n\n"..s;end; return ""; end); return ZamienNaKody(zawartosc,false); else return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or ""; end; else return ""; end; end; return fun,nil,true; end; else if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then return zawartosc,nil,true; end; local szablon,czy_center=UsuwanieZnacznikowe(szablon,obiekt,kod,nazwa,zawartosc,atrybuty); if(szablon)then tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[100]; if(tablica_danych_parametrow_szablonu_strony_numer)then tablica_danych_parametrow_szablonu_strony_numer[kod]=nil; end; end; end; return nil,true; elseif(obiekt=="INNEPRE")then if(mw.ustring.match(szablon,"^%s*$"))then return "",nil,true; end; return nil,true; elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then local tak=false; szablon=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,function(szablon,obiekt,kod,parametr1,parametr2,parametr3) if(obiekt=="ZNACZNIK")then tak=true; local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3; if((nazwa=="br")or(nazwa=="hr"))then return " ",nil,true; else return zawartosc or "",nil,true; end; end; return nil,true; end); if(tak)then tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; end; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=stronicowyparser_analizaaspisurzeczy_modul.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true); if(not czy_element_spisu)then return "",nil,true;end; elseif(obiekt=="WIKITABELA")then szablon=mw.ustring.match(szablon,"^{|(.-)|}$"); szablon=mw.ustring.gsub(szablon,"^[^\n]+",""); --szablon=mw.ustring.gsub(szablon,"[|!][|!]","\n\n"); szablon=mw.ustring.gsub(szablon,"\n|[%-%+]?[^%S\n]*[^|\n]*|([^|\n]+)",function(komorka) return PrzetwarzanieZnacznikowe(komorka); end); szablon=mw.ustring.gsub(szablon,"\n|%-([^|\n]+)",function(komorka) return PrzetwarzanieZnacznikowe(komorka); end); szablon=mw.ustring.gsub(szablon,"\n|%-[^%S\n|]*","\n\n"); szablon=mw.ustring.gsub(szablon,"||([^|\n]+)",function(komorka) return PrzetwarzanieZnacznikowe(komorka); end) szablon=mw.ustring.gsub(szablon,"\n|%+[^%S\n]*([^\n]+)",function(komorka) return PrzetwarzanieZnacznikowe(komorka); end); szablon=mw.ustring.gsub(szablon,"\n|([^\n|]+)",function(komorka) return PrzetwarzanieZnacznikowe(komorka); end); return szablon,nil,true; end; return nil,true; end,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial) tekst_rozwiniety_calego_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_rozwiniety_calego_artykulu,function(linia) local linia_nie_nil=mw.ustring.match(linia,wzor); if(linia_nie_nil)then local tak=nil; local linia_tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_nie_nil,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then tak=true; return " "; end; local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(szablon_ce)then local tekst=tabela_parametrow_szablonu[szablon_ce]; if(tekst)then tak=true; return tekst; end; end; end); if(wynik)then return wynik,nil,true;end; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa=="br")or(nazwa=="hr"))then tak=true; return " ",nil,true; elseif((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then tak=true; return zawartosc or "",nil,true; end; elseif(obiekt=="PRE")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguPre(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc); if(czy_dodatni_rozdzial)then local zawartosc=mw.ustring.gsub(zawartosc,"\n"," "); tak=true; return zawartosc,nil,true; else tak=true; return zawartosc,nil,true; end; else tak=true; return "",nil,true; end; elseif(obiekt=="ŹRÓDŁO")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguSyntaxHighLight(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc); if(czy_dodatni_rozdzial)then local zawartosc=mw.ustring.gsub(zawartosc,"\n"," "); tak=true; return zawartosc,nil,true; else tak=true; return zawartosc,nil,true; end; else tak=true; return "",nil,true; end; elseif(obiekt=="NOWIKI")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguNowiki(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc); local zawartosc=mw.ustring.gsub(zawartosc,"\n"," "); tak=true; return zawartosc,nil,true; else tak=true; return "",nil,true; end; end; return nil,true; end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); return linia_tekst; else return nil; end; end); end; ----- LiniaRozdzialyDodatnieOrazUjemne("^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$",true); LiniaRozdzialyDodatnieOrazUjemne("^([%*#;:]+[^\n]*)$",false); tekst_rozwiniety_calego_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nil,tablica_analizy_obiektow_strony_dany_modul, function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n "; else local numer_parametru=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(numer_parametru)then local parametr=tabela_parametrow_szablonu[numer_parametru]; if(parametr)then local naglowek=p.NapisWprowadzeniaTekstuHNumer(parametr); if(naglowek)then local obiekt_hnumer="ZNACZNIK"; local kod_hnumer=(#(tablica_analizy_obiektow_strony_dany_modul[obiekt_hnumer] or {}))+1; return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt_hnumer,kod_hnumer).."\n\n ",naglowek,obiekt_hnumer,kod_hnumer; end; end; end; end; end); elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n "; end; elseif(obiekt=="INNEPRE")then return "\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n"; elseif((obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU")or(obiekt=="PUDEŁKOWEJŚCIA"))then return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n "; end; end,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE); ----- end; tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"<!%-%-.-%-%->",""); local tab_magiczne_derektywy=stronicowyparser_obiekty_modul.magiczne_derektywy; tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"__(%u+)__",function(derektywy) return tab_magiczne_derektywy[derektywy] and "" or nil; end); tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"^(%-%-%-%-+)[^%S\n]*([^\n]+)","%1\n %2"); tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n(%-%-%-%-+)[^%S\n]*([^\n]+)","\n%1\n %2"); --tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n\n","\n\n"); if(czy_dalej_rozwazac_zakodowane)then ---- tekst_rozwiniety_calego_artykulu=p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst_rozwiniety_calego_artykulu,nil,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE); tekst_rozwiniety_calego_artykulu=__FUNKCJA_ANALIZA_SPISU and __FUNKCJA_ANALIZA_SPISU(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or tekst_rozwiniety_calego_artykulu; end; --mw.log( tekst_rozwiniety_calego_artykulu) --local iter_main=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"\n([^\n]*)\n"); local iter_main=szeregi_modul.IteratorLiniiTekstu(tekst_rozwiniety_calego_artykulu); local naglowek_aktualnego_rozdzialu; local linia_naglowka_aktualnego_rozdzialu; local poziom_aktualnego_rozdzialu; local poczatek_aktualnego_rozdzialu; local numeracja_aktualnego_rozdzialu; local czy_rozdzial_aktualny_centrowany; local czy_koniec=false; ---- local odczyt_jakie_spisy_tresci=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu; local jakie_spisy_tresci=parametry_modul["KopiujTabelęElementów"](odczyt_jakie_spisy_tresci); setmetatable(jakie_spisy_tresci,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter); local czy_ce_spis_tresci=nil; ---- local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local parser=p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); ----- local tak_ce_spis_tresci=nil; local m=0; local function Wystepowanie(linia,funkcja1,funkcja2) local czy_znaleziono_okladka=false; local function RozwazajLinie(szablon,obiekt,kod) if(szablon)then local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_okladka=mw.ustring.match(artykul,stronicowyparser_obiekty_modul.artykularne_niespisowe[1]); if((artykul~="")and((numer_rodzaju_artykulu~=1)or((numer_rodzaju_artykulu==1)and(not czy_okladka))))then return 1; elseif(czy_okladka)then czy_znaleziono_okladka=true; end; end; else return 0; end; end; end; local function RozwazajLinieZnacznikowe(zawartosc) local wartosc; local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst) local function CenterZnacznikLinia(szablon,obiekt,kod) wartosc=RozwazajLinie(szablon,obiekt,kod); if(not wartosc)then return;end; if(wartosc==1)then return nil;end; return szablon,tekst; end; if(obiekt=="SZABLON")then local szablon,tekst=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod); return szablon,tekst; end); return szablon,tekst; elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod); return szablon,tekst; end; end); for szablon,obiekt,kod in iter do end; return wartosc; end; local szablon_spis_tresci; local function spis_tresci(wystepowanie_linkow,hn_number) local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iter do local function Spis(szablon,obiekt,kod) local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if((tab)and(numer_rodzaju_artykulu==1)and(stronicowyparser_analizaaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false))))then tak_ce_spis_tresci=hn_number; szablon_spis_tresci=wystepowanie_linkow; return 1; end; else return 0; end; end; if(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local wynik=Spis(szablon,obiekt,kod); if(wynik)then return wynik;end; end); if(wynik)then return wynik;end; elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then local wynik=Spis(szablon,obiekt,kod); if(wynik)then return wynik;end; end; end; wystepowanie_linkow=czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul) or wystepowanie_linkow; wystepowanie_linkow=mw.text.trim(wystepowanie_linkow); local czy_ce=jakie_spisy_tresci[wystepowanie_linkow]; if(czy_ce)then tak_ce_spis_tresci=hn_number; szablon_spis_tresci=wystepowanie_linkow; return 1; end; end; local wystepowanie_linkow=mw.ustring.match(linia,"^[#:%*;%d%.>]+%s*(.+)$") or mw.ustring.match(linia,"^(%S+%s*.+)$"); local tak=nil; if(czy_dalej_rozwazac_zakodowane)then if(wystepowanie_linkow)then local czy_rozdzial=nil;local wartosc=nil; local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst) local czy_linkw=(obiekt=="LINKW");local czy_linkz=(obiekt=="LINKZ");local czy_szablon=(obiekt=="SZABLON");local czy_znacznik=(obiekt=="ZNACZNIK"); if(czy_linkw or czy_linkz or czy_szablon or czy_znacznik)then local podrecznik=nil; if(czy_szablon)then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) ----- local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(czy_ce)then local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce]; if(szablon_spis_tresci_zawartosc)then szablon_spis_tresci_zawartosc=mw.ustring.match(szablon_spis_tresci_zawartosc,"^'*%s*(.-)%s*'*$"); wartosc=spis_tresci(szablon_spis_tresci_zawartosc,true); else wartosc=RozwazajLinie(szablon,obiekt,kod); end; else wartosc=RozwazajLinie(szablon,obiekt,kod); if(wartosc)then podrecznik=true;else podrecznik=false;end; end; end); elseif(czy_znacznik)then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then if(nazwa=="center")then szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$"); wartosc=spis_tresci(szablon_spis_tresci,true); elseif(znaczniki_wprowadzenia_tekstu[nazwa])then szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$"); local hn_number=p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty) wartosc=spis_tresci(szablon_spis_tresci,hn_number); else wartosc=RozwazajLinieZnacznikowe(zawartosc); end; end; else wartosc=RozwazajLinie(szablon,obiekt,kod); if(wartosc)then podrecznik=true;else podrecznik=false;end; end; if(podrecznik==true)then if(not czy_rozdzial)then if(wartosc==1)then local wystepowanie_linku_lub_szablonu=(mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod))) and(not mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*>")) and (mw.ustring.match(tekst,"^[^%.]*%s*$")); if(not wystepowanie_linku_lub_szablonu)then return nil;end; czy_rozdzial=true; elseif(wartosc==0)then local ile; tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),""); return "", ((ile>0) and tekst or nil); end; end; elseif(podrecznik==false)then if(not wartosc)then if(czy_znaleziono_okladka)then local czy_nie_uwzgledniac_linii=mw.ustring.match(tekst,"[%s%p]*<[%s<]-%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(not czy_nie_uwzgledniac_linii)then local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),""); return "", ((ile>0) and tekst or nil); else czy_znaleziono_okladka=false; end; else local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),""); return "", ((ile>0) and tekst or nil); end; end; end; if(not wartosc)then return;end; tak=tak or (wartosc==1); if(tak)then return;end; return szablon,tekst; else local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),""); return "", ((ile>0) and tekst or nil); end; end); for szablon,obiekt,kod in iter do end; end; end; if(tak)then funkcja1(szablon_spis_tresci); else funkcja2(); end; end return function() local tab_str={}; local linia; local function IterMain() for linia in iter_main do local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;local numeracja_rozdzialu;local czy_rozdzial_centrowany; --------------------------------------- nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"); if(nazwa_rozdzialu) then nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(nazwa_rozdzialu); end; if(not nazwa_rozdzialu)then if(czy_rozdzialy_analizowac)then if(not czy_w_spisie_tresci)then Wystepowanie(linia,function(szablon_spis_tresci) if(not tak_ce_spis_tresci)then nazwa_rozdzialu="Spis treści"; poziom_rozdzialu=nil; table.insert(tab_str,linia); else if(szablon_spis_tresci)then local numeracja,rozdzial=p.NumeracjaOrazTekstWprowadzeniaTekstu(szablon_spis_tresci); if((numeracja)and(rozdzial))then numeracja_rozdzialu=numeracja; nazwa_rozdzialu=rozdzial; else nazwa_rozdzialu=szablon_spis_tresci; numeracja_rozdzialu=nil; end; else nazwa_rozdzialu="Spis treści"; numeracja_rozdzialu=nil; end; local czy_rozdzial_naglowka_hn=tonumber(tak_ce_spis_tresci); poziom_rozdzialu=czy_rozdzial_naglowka_hn or 2; czy_rozdzial_centrowany=(not czy_rozdzial_naglowka_hn)and true or false; poczatek_rozdzialu=nil; --str=""; end; end,function() nazwa_rozdzialu=nil; end); end; if(not nazwa_rozdzialu)then local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); end; else nazwa_rozdzialu=nil; end; end; if(nazwa_rozdzialu)then czy_w_spisie_tresci=true; if(not naglowek_aktualnego_rozdzialu)then naglowek_aktualnego_rozdzialu=nazwa_rozdzialu; linia_naglowka_aktualnego_rozdzialu=linia; poziom_aktualnego_rozdzialu=poziom_rozdzialu; poczatek_aktualnego_rozdzialu=poczatek_rozdzialu; numeracja_aktualnego_rozdzialu=numeracja_rozdzialu; czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany; else ---------------------------------------------- local naglowek_posredni_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu; local linia_naglowka_posredni_aktualnego_rozdzialu=linia_naglowka_aktualnego_rozdzialu; local poziom_posredni_aktualnego_rozdzialu=poziom_aktualnego_rozdzialu; local poczatek_posredni_aktualnego_rozdzialu=poczatek_aktualnego_rozdzialu; local numeracja_posredni_aktualnego_rozdzialu=numeracja_aktualnego_rozdzialu; local czy_rozdzial_posredni_centrowany=czy_rozdzial_aktualny_centrowany; ---------------------------------------------- naglowek_aktualnego_rozdzialu=nazwa_rozdzialu; linia_naglowka_aktualnego_rozdzialu=linia; poziom_aktualnego_rozdzialu=poziom_rozdzialu; poczatek_aktualnego_rozdzialu=poczatek_rozdzialu; numeracja_aktualnego_rozdzialu=numeracja_rozdzialu; czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany; local str=table.concat(tab_str,"\n"); if(not __FUNKCJA2)then naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul) or naglowek_posredni_aktualnego_rozdzialu ) or nil; str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil; elseif(czy_dalej_rozwazac_zakodowane)then naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu and __FUNKCJA2(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil; str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil; end; --linia_poprz=nil; m=m+1; return {naglowek_posredni_aktualnego_rozdzialu,linia_naglowka_posredni_aktualnego_rozdzialu,},str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu,numeracja_posredni_aktualnego_rozdzialu,czy_rozdzial_posredni_centrowany; end; else if(naglowek_aktualnego_rozdzialu)then table.insert(tab_str,linia); end; --linia_poprz=linia; end; end; if(czy_koniec)then return nil;end; czy_koniec=true; --- local str=table.concat(tab_str,"\n"); -- if(not __FUNKCJA2)then naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul) or naglowek_aktualnego_rozdzialu ) or nil; str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil; elseif(czy_dalej_rozwazac_zakodowane)then naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu and __FUNKCJA2(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil; str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil; end; --linia_nast=nil;linia_poprz=nil; m=m+1; return (naglowek_aktualnego_rozdzialu and {naglowek_aktualnego_rozdzialu,linia_naglowka_aktualnego_rozdzialu,} or nil),str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; ---- local naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany=IterMain(); return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end,tekst_rozwiniety_calego_artykulu; end; return p; 2hd9t4s0n9uiv6r3qaxpo0zwv6l32xu Szablon:NawigacjaSpecjalna/Nawigacja/Pomoc:Spis treści 10 61114 551279 546366 2026-08-10T19:54:46Z Persino 2851 551279 wikitext text/x-wiki <includeonly>{{Układ autonawigacji|krok={{{1}}} |automat manualny=tak |spis treści=Pomoc:Spis treści |Pomoc:Spis treści|Pomoc - Spis treści |Pomoc:Spis treści/Wstęp|Wstęp |Wikibooks:Witamy nowicjuszy|Witamy nowicjuszy |Wikibooks:Zasady i wskazówki|Zasady i wskazówki |Wikibooks:Szybka pomoc|Szybka pomoc |Wikibooks:Czym jest Wikibooks|Czym jest Wikibooks? |Wikibooks:Różnice między Wikipedią i Wikibooks|Różnice między Wikipedią i Wikibooks |Wikibooks:Dlaczego warto rozpocząć współpracę|Dlaczego warto rozpocząć współpracę? |Wikibooks:Dlaczego używać wolnych podręczników|Dlaczego używać wolnych podręczników? |Wikibooks:Dlaczego nie pisać na Wikibooks|Dlaczego nie pisać na Wikibooks? |Wikibooks:Wikietykieta|Wikietykieta |Pomoc:Wikietykieta|Wikietykieta |Wikibooks:Neutralny punkt widzenia|Neutralny punkt widzenia |Pomoc:Żargon użytkowników|Żargon użytkowników |Wikibooks:Informacje prawne|Informacje prawne |Wikibooks:Prawa autorskie|Prawa autorskie |Pomoc:Spis treści/Edycja|Edycja |Wikibooks:Brudnopis|Brudnopis |Pomoc:Edycja kodu|Edycja kodu |Wikibooks:Import stron|Import stron |Wikibooks:Etapy rozwoju książek|Etapy rozwoju książek |Wikibooks:Ilustracja Wikibooks|Ilustracja Wikibooks |Pomoc:Jak edytować artykuły|Jak edytować artykuły? |Wikibooks:Nazewnictwo artykułów|Nazewnictwo artykułów |Pomoc:Podświetlanie składni|Podświetlanie składni |Pomoc:Problemy z polskimi znakami|Problemy z polskimi znakami |Pomoc:Quiz|Quiz |Pomoc:Tworzenie podręcznika|Tworzenie podręcznika |Wikibooks:Wandalizm|Wandalizm |Wikibooks:Podręczniki do druku|Podręczniki do druku |Pomoc:Tworzenie wersji do druku|Tworzenie wersji do druku |Pomoc:Tworzenie wersji PDF|Tworzenie wersji PDF |Pomoc:Tworzenie wersji PDF/javaLatex|Tworzenie wersji PDF/javaLatex |Pomoc:Książki|Książki |Pomoc:Spis treści/Wkład miesiąca|Wkład miesiąca |Wikibooks:Wkład miesiąca/Aktualne głosowanie|Aktualne głosowanie |Wikibooks:Wkład miesiąca/Wstęp|Wstęp |Wikibooks:Wkład miesiąca/Regulamin|Regulamin |Wikibooks:Wkład miesiąca/Nominacje|Nominacje |Pomoc:Spis treści/Komunikacja|Komunikacja |Wikibooks:Kanał IRC|Kanał IRC |Wikibooks:Kontakt|Kontakt |Wikibooks:Portal użytkowników|Portal użytkowników |Pomoc:Archiwizowanie strony dyskusji|Archiwizowanie strony dyskusji |Wikibooks:Przedstawicielstwo dyplomatyczne|Przedstawicielstwo dyplomatyczne |Pomoc:Spis treści/Korzystanie z Wikibooks|Korzystanie z Wikibooks |Wikibooks:Jak przeglądać Wikibooks|Jak przeglądać Wikibooks? |Wikibooks:Księgozbiór|Księgozbiór |Wikibooks:Księgozbiór/Wybrane|Księgozbiór - Wybrane |Wikibooks:Księgozbiór/Alfabetycznie|Księgozbiór - Alfabetycznie |Wikibooks:Księgozbiór/Tematycznie|Księgozbiór - Tematycznie |Wikibooks:Księgozbiór/Poziom|Księgozbiór - Poziom |Wikibooks:Księgozbiór/Status|Księgozbiór - Status |Portal:Nauki ścisłe i przyrodnicze|Portal - Nauki ścisłe i przyrodnicze |Portal:Informatyka|Portal - Informatyka |Portal:Nauki techniczne|Portal - Nauki techniczne |Portal:Nauki społeczne i humanistyczne|Portal - Nauki społeczne i humanistyczne |Portal:Sport i rozrywka|Portal - Sport i rozrywka |Portal:Hobby, poradniki i książki różne|Portal - Hobby, poradniki i książki różne |Wikibooks:Promocja|Promocja |Pomoc:Tryb ciemny|Tryb ciemny |Pomoc:Spis treści/Historia Wikibooks|Historia Wikibooks |Wikibooks:Historia Wikibooks|Historia Wikibooks |Wikibooks:Piąte urodziny|Piąte urodziny |Wikibooks:6. urodziny polskich Wikibooks|6. urodziny polskich Wikibooks |Wikibooks:Wikikalendarz 2009|Wikikalendarz 2009 |Wikibooks:Sprzątanie Wikibooks|Sprzątanie Wikibooks |Wikibooks:Sprzątanie Wikibooks/2009|Sprzątanie Wikibooks - 2009 |Wikibooks:Sprzątanie Wikibooks/2011|Sprzątanie Wikibooks - 2011 |Wikibooks:Statystyki|Statystyki |Pomoc:Spis treści/Technikalia|Technikalia |Wikibooks:Przestrzenie nazw|Przestrzenie nazw |Wikibooks:Poczekalnia|Poczekalnia |Wikibooks:Poczekalnia/naprawa|Poczekalnia - Naprawa |Wikibooks:Poczekalnia/prowokacje|Poczekalnia - Prowokacje |Wikibooks:Poczekalnia/artykuły|Poczekalnia - Artykuły |Wikibooks:Poczekalnia/kwestie techniczne|Poczekalnia - Kwestie techniczne |Wikibooks:Poczekalnia/Zgłoszenia|Poczekalnia - Zgłoszenia |Wikibooks:Poczekalnia/Załatwione|Poczekalnia - Załatwione |Wikibooks:VisualEditor|VisualEditor |Pomoc:Nowa skórka – wektor|Nowa skórka – wektor |Wikibooks:Skróty|Skróty |Pomoc:Spis treści/Strona główna|Strona główna |Pomoc:Spis treści/Wybrane książki|Wybrane książki |Wikibooks:Mechanizm MediaWiki|Mechanizm MediaWiki |Wikibooks:Szablony|Mechanizm MediaWiki - Szablony |Wikibooks:Moduły|Mechanizm MediaWiki - Moduły |Wikibooks:Moduły/Parametry|Moduł:Parametry |Wikibooks:Moduły/Html|Moduł:Html |Wikibooks:Moduły/Książkowe|Moduł:Książkowe |Wikibooks:Moduły/Nazwy|Moduł:Nazwy |Wikibooks:Moduły/Nazwy/Tom I|Moduł:Nazwy - Tom I |Wikibooks:Moduły/Nazwy/Tom II|Moduł:Nazwy - Tom II |Wikibooks:Moduły/Nazwy/Tom III|Moduł:Nazwy - Tom III |Wikibooks:Moduły/Nazwy/Tom IV|Moduł:Nazwy - Tom IV |Wikibooks:Moduły/Nazwy/Np|Moduł:Nazwy - Np |Wikibooks:Moduły/Pudełko|Moduł:Pudełko |Wikibooks:Moduły/Pudełko/Tom I|Moduł:Pudełko - Tom I |Wikibooks:Moduły/Pudełko/Tom II|Moduł:Pudełko - Tom II |Wikibooks:Moduły/Pudełko/Tom III|Moduł:Pudełko - Tom III |Wikibooks:Moduły/Pudełko/Tom IV|Moduł:Pudełko - Tom IV |Wikibooks:Moduły/Pudełko/Tom V|Moduł:Pudełko - Tom V |Wikibooks:Moduły/Pudełko/Pomocne|Moduł:Pudełko - Pomocne |Wikibooks:Moduły/Pudełko/Potrzebne|Moduł:Pudełko - Potrzebne |Wikibooks:Moduły/Pudełko/ParametryCechy|Moduł:Pudełko - Parametry Cechy |Wikibooks:Moduły/Ramka|Moduł:Ramka |Wikibooks:Moduły/Specjalne|Moduł:Specjalne |Wikibooks:Moduły/StronicowyParser|StronicowyParser |Wikibooks:Moduły/StronicowyParser/Tom I|StronicowyParser - Tom I |Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy|StronicowyParser - AnalizaSpisuRzeczy |Wikibooks:Moduły/StronicowyParser/GłównaFunkcjaZbieraniaDanychStron|StronicowyParser - GłównaFunkcjaZbieraniaDanychStron |Wikibooks:Moduły/StronicowyParser/Kategorie|StronicowyParser - Kategorie |Wikibooks:Moduły/StronicowyParser/NumerLubNazwaArtykułówKsiążek|StronicowyParser - NumerLubNazwaArtykułówKsiążek |Wikibooks:Moduły/StronicowyParser/NumerLubNazwaNagłówkówKsiążek|StronicowyParser - NumerLubNazwaNagłówkówKsiążek |Wikibooks:Moduły/StronicowyParser/NumerObiektu|StronicowyParser - NumerObiektu |Wikibooks:Moduły/StronicowyParser/NumeracjaObiektówStron|StronicowyParser - NumeracjaObiektówStron |Wikibooks:Moduły/StronicowyParser/Potrzebne|StronicowyParser - Potrzebne |Wikibooks:Moduły/StronicowyParser/Problemy|StronicowyParser - Problemy |Wikibooks:Moduły/StronicowyParser/Rozdziały|StronicowyParser - Rozdziały |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I|StronicowyParser - Rozdziały - Tom I |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II|StronicowyParser - Rozdziały - Tom II |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III|StronicowyParser - Rozdziały - Tom III |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV|StronicowyParser - Rozdziały - Tom IV |Wikibooks:Moduły/StronicowyParser/SpisTreści|StronicowyParser - SpisTreści |Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom I|StronicowyParser - SpisTreści - Tom I |Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II|StronicowyParser - SpisTreści - Tom II |Wikibooks:Moduły/StronicowyParser/StronaSubst|StronicowyParser - StronaSubst |Wikibooks:Moduły/StronicowyParser/Tekst|StronicowyParser - Tekst |Wikibooks:Moduły/StronicowyParser/ZbieranieDanychStron|StronicowyParser - ZbieranieDanychStron |Wikibooks:Moduły/StronicowyParser/SzablonyTekstu|StronicowyParser - SzablonyTekstu |Wikibooks:Moduły/StronicowyParser/informacje|StronicowyParser - informacje |Wikibooks:Moduły/StronicowyParser/obiekty|StronicowyParser - obiekty |Wikibooks:Moduły/Szeregi|Moduł:Szeregi |Wikibooks:Moduły/Skrót|Moduł:Skrót |Wikibooks:Moduły/Strony|Moduł:Strony |Wikibooks:Moduły/Sekcja referencyjna|Moduł:Sekcja referencyjna |Wikibooks:Szablony/Ogólne|Szablony - Ogólne |Wikibooks:Szablony/Informacje|Szablony - Informacje |Wikibooks:Szablony/PrzypisStrona|PrzypisStrona |Wikibooks:Szablony/Podręcznikowe|Szablony - Podręcznikowe |Wikibooks:Szablony/Książkowe|Szablony - Książkowe |Wikibooks:Szablony/Tekst|Szablony - Tekst |Wikibooks:Szablony/Zawartość|Szablony - Zawartość |Wikibooks:Szablony/Nagłówki|Szablony - Nagłówki |Wikibooks:Szablony/Przekierowania|Szablony - Przekierowania |Wikibooks:Szablony/Języki|Szablony - Języki |Wikibooks:Szablony/Liczby|Szablony - Liczby |Wikibooks:Szablony/Kategorie|Szablony - Kategorie |Wikibooks:Szablony/Opisy|Szablony - Opisy |Wikibooks:Szablony/Znaczniki|Szablony - Znaczniki |Wikibooks:Szablony/Szablony opływania|Szablony opływania |Wikibooks:Szablony/Stronicowe|Szablony - Stronicowe |Wikibooks:Szablony/Kontenerowe|Szablony - Kontenerowe |Wikibooks:Szablony/Elastyczne|Szablony - Elastyczne |Wikibooks:Szablony/Infoboksy/Prolog|Szablony - Infoboksy - Prolog |Wikibooks:Szablony/Infoboksy/Tom I|Szablony - Infoboksy - Tom I |Wikibooks:Szablony/Infoboksy/Tom II|Szablony - Infoboksy - Tom II |Wikibooks:Szablony/Infoboksy/Tom III|Szablony - Infoboksy - Tom III |Wikibooks:Szablony/Infoboksy/Tom IV|Szablony - Infoboksy - Tom IV |Wikibooks:Szablony/Infoboksy/Tom V|Szablony - Infoboksy - Tom V |Wikibooks:Szablony/Infoboksy/Tom VI|Szablony - Infoboksy - Tom VI |Wikibooks:Szablony/Infoboksy/Komponenty|Szablony - Infoboksy - Komponenty |Wikibooks:Szablony/Infoboksy/Komponenty (organizmy żywe)|Infoboksy - Komponenty (organizmy żywe) |Wikibooks:Szablony/Porządkowe|Szablony - Porządkowe |Wikibooks:Szablony/Źródła artykułów|Szablony - Źródła artykułów |Wikibooks:Szablony/Linki|Szablony - Linki |Wikibooks:Szablony/Linki inteligentne|Szablony - Linki inteligentne |Wikibooks:Szablony/Do usunięcia|Szablony - Do usunięcia |Wikibooks:Szablony/Nawigacja|Szablony - Nawigacja |Wikibooks:Szablony/Media|Szablony - Media |Wikibooks:Szablony/Grafika|Szablony - Grafika |Wikibooks:Szablony/Licencjonowanie|Szablony - Licencjonowanie |Wikibooks:Szablony/Techniczne|Szablony - Techniczne |Wikibooks:Szablony/Wikipedysta|Szablony - Wikipedysta |Wikibooks:Szablony/Dyskusja Wikipedysty|Szablony - Dyskusja Wikipedysty |Wikibooks:Szablony/MediaWiki|Szablony - MediaWiki |Wikibooks:Szablony/Systemowe|Szablony - Systemowe |Pomoc:Spis treści/Szablony/Tom I|Szablony - Tom I |Pomoc:Spis treści/Szablony/Tom II|Szablony - Tom II |Pomoc:Spis treści/Szablony/Tom III|Szablony - Tom III |Pomoc:Spis treści/Szablony/Tom IV|Szablony - Tom IV |Pomoc:Spis treści/Administracja|Administracja |Wikibooks:Kwestie techniczne|Kwestie techniczne |Wikibooks:Wikipedyści potrzebujący pomocy|Wikipedyści potrzebujący pomocy |Wikibooks:Zgłoś błąd (ZB)|Zgłoś błąd (ZB) |Wikibooks:Lista Naruszeń Praw Autorskich (NPA)|Lista Naruszeń Praw Autorskich (NPA) |Wikibooks:Administratorzy|Administratorzy |Wikibooks:Prośby do administratorów|Prośby do administratorów |Wikibooks:Administratorzy interfejsu|Administratorzy interfejsu |Wikibooks:Prośby do administratorów interfejsu|Prośby do administratorów interfejsu |Wikibooks:Biurokraci|Biurokraci |Wikibooks:Boty|Boty |Wikibooks:Stewardzi|Stewardzi |Wikibooks:Użytkownicy|Użytkownicy |Wikibooks:Automatycznie zatwierdzeni użytkownicy|Automatycznie zatwierdzeni użytkownicy |Wikibooks:Zatwierdzeni użytkownicy|Zatwierdzeni użytkownicy |Wikibooks:Przyznawanie uprawnień|Przyznawanie uprawnień |Wikibooks:Nazwa użytkownika|Nazwa użytkownika |Wikibooks:Prośby o zmianę nazwy użytkownika|Prośby o zmianę nazwy użytkownika |Wikibooks:Uprawnieni do logowania się z zablokowanych adresów IP|Uprawnieni do logowania się z zablokowanych adresów IP |Wikibooks:GNU Free Documentation License|GNU Free Documentation License }}</includeonly><noinclude>{{Dokumentacja|zawartość=Szablon manualny (ręczny), nie automatyczny, bo ustawiony za pomocą {{Parametr|automat manualny|tak}}, wskazujący poprzedni i następny artykuł pomocy oraz ich stronę główną, czyli spis po {{LinkPomoc2|Spis treści}}.}}{{Kategoria|Szablony nawigacyjne układu autonawigacji do autonawigacji podręczników}}</noinclude> qljcv7pwcyq9ri2vfi4m9a6k1kae9ap 551321 551279 2026-08-10T23:58:27Z Persino 2851 551321 wikitext text/x-wiki <includeonly>{{Układ autonawigacji|krok={{{1}}} |automat manualny=tak |spis treści=Pomoc:Spis treści |Pomoc:Spis treści|Pomoc - Spis treści |Pomoc:Spis treści/Wstęp|Wstęp |Wikibooks:Witamy nowicjuszy|Witamy nowicjuszy |Wikibooks:Zasady i wskazówki|Zasady i wskazówki |Wikibooks:Szybka pomoc|Szybka pomoc |Wikibooks:Czym jest Wikibooks|Czym jest Wikibooks? |Wikibooks:Różnice między Wikipedią i Wikibooks|Różnice między Wikipedią i Wikibooks |Wikibooks:Dlaczego warto rozpocząć współpracę|Dlaczego warto rozpocząć współpracę? |Wikibooks:Dlaczego używać wolnych podręczników|Dlaczego używać wolnych podręczników? |Wikibooks:Dlaczego nie pisać na Wikibooks|Dlaczego nie pisać na Wikibooks? |Wikibooks:Wikietykieta|Wikietykieta |Pomoc:Wikietykieta|Wikietykieta |Wikibooks:Neutralny punkt widzenia|Neutralny punkt widzenia |Pomoc:Żargon użytkowników|Żargon użytkowników |Wikibooks:Informacje prawne|Informacje prawne |Wikibooks:Prawa autorskie|Prawa autorskie |Pomoc:Spis treści/Edycja|Edycja |Wikibooks:Brudnopis|Brudnopis |Pomoc:Edycja kodu|Edycja kodu |Wikibooks:Import stron|Import stron |Wikibooks:Etapy rozwoju książek|Etapy rozwoju książek |Wikibooks:Ilustracja Wikibooks|Ilustracja Wikibooks |Pomoc:Jak edytować artykuły|Jak edytować artykuły? |Wikibooks:Nazewnictwo artykułów|Nazewnictwo artykułów |Pomoc:Podświetlanie składni|Podświetlanie składni |Pomoc:Problemy z polskimi znakami|Problemy z polskimi znakami |Pomoc:Quiz|Quiz |Pomoc:Tworzenie podręcznika|Tworzenie podręcznika |Wikibooks:Wandalizm|Wandalizm |Wikibooks:Podręczniki do druku|Podręczniki do druku |Pomoc:Tworzenie wersji do druku|Tworzenie wersji do druku |Pomoc:Tworzenie wersji PDF|Tworzenie wersji PDF |Pomoc:Tworzenie wersji PDF/javaLatex|Tworzenie wersji PDF/javaLatex |Pomoc:Książki|Książki |Pomoc:Spis treści/Wkład miesiąca|Wkład miesiąca |Wikibooks:Wkład miesiąca/Aktualne głosowanie|Aktualne głosowanie |Wikibooks:Wkład miesiąca/Wstęp|Wstęp |Wikibooks:Wkład miesiąca/Regulamin|Regulamin |Wikibooks:Wkład miesiąca/Nominacje|Nominacje |Pomoc:Spis treści/Komunikacja|Komunikacja |Wikibooks:Kanał IRC|Kanał IRC |Wikibooks:Kontakt|Kontakt |Wikibooks:Portal użytkowników|Portal użytkowników |Pomoc:Archiwizowanie strony dyskusji|Archiwizowanie strony dyskusji |Wikibooks:Przedstawicielstwo dyplomatyczne|Przedstawicielstwo dyplomatyczne |Pomoc:Spis treści/Korzystanie z Wikibooks|Korzystanie z Wikibooks |Wikibooks:Jak przeglądać Wikibooks|Jak przeglądać Wikibooks? |Wikibooks:Księgozbiór|Księgozbiór |Wikibooks:Księgozbiór/Wybrane|Księgozbiór - Wybrane |Wikibooks:Księgozbiór/Alfabetycznie|Księgozbiór - Alfabetycznie |Wikibooks:Księgozbiór/Tematycznie|Księgozbiór - Tematycznie |Wikibooks:Księgozbiór/Poziom|Księgozbiór - Poziom |Wikibooks:Księgozbiór/Status|Księgozbiór - Status |Portal:Nauki ścisłe i przyrodnicze|Portal - Nauki ścisłe i przyrodnicze |Portal:Informatyka|Portal - Informatyka |Portal:Nauki techniczne|Portal - Nauki techniczne |Portal:Nauki społeczne i humanistyczne|Portal - Nauki społeczne i humanistyczne |Portal:Sport i rozrywka|Portal - Sport i rozrywka |Portal:Hobby, poradniki i książki różne|Portal - Hobby, poradniki i książki różne |Wikibooks:Promocja|Promocja |Pomoc:Tryb ciemny|Tryb ciemny |Pomoc:Spis treści/Historia Wikibooks|Historia Wikibooks |Wikibooks:Historia Wikibooks|Historia Wikibooks |Wikibooks:Piąte urodziny|Piąte urodziny |Wikibooks:6. urodziny polskich Wikibooks|6. urodziny polskich Wikibooks |Wikibooks:Wikikalendarz 2009|Wikikalendarz 2009 |Wikibooks:Sprzątanie Wikibooks|Sprzątanie Wikibooks |Wikibooks:Sprzątanie Wikibooks/2009|Sprzątanie Wikibooks - 2009 |Wikibooks:Sprzątanie Wikibooks/2011|Sprzątanie Wikibooks - 2011 |Wikibooks:Statystyki|Statystyki |Pomoc:Spis treści/Technikalia|Technikalia |Wikibooks:Przestrzenie nazw|Przestrzenie nazw |Wikibooks:Poczekalnia|Poczekalnia |Wikibooks:Poczekalnia/naprawa|Poczekalnia - Naprawa |Wikibooks:Poczekalnia/prowokacje|Poczekalnia - Prowokacje |Wikibooks:Poczekalnia/artykuły|Poczekalnia - Artykuły |Wikibooks:Poczekalnia/kwestie techniczne|Poczekalnia - Kwestie techniczne |Wikibooks:Poczekalnia/Zgłoszenia|Poczekalnia - Zgłoszenia |Wikibooks:Poczekalnia/Załatwione|Poczekalnia - Załatwione |Wikibooks:VisualEditor|VisualEditor |Pomoc:Nowa skórka – wektor|Nowa skórka – wektor |Wikibooks:Skróty|Skróty |Pomoc:Spis treści/Strona główna|Strona główna |Pomoc:Spis treści/Wybrane książki|Wybrane książki |Wikibooks:Mechanizm MediaWiki|Mechanizm MediaWiki |Wikibooks:Szablony|Mechanizm MediaWiki - Szablony |Wikibooks:Moduły|Mechanizm MediaWiki - Moduły |Wikibooks:Moduły/Parametry|Moduł:Parametry |Wikibooks:Moduły/Html|Moduł:Html |Wikibooks:Moduły/Książkowe|Moduł:Książkowe |Wikibooks:Moduły/Nazwy|Moduł:Nazwy |Wikibooks:Moduły/Nazwy/Tom I|Moduł:Nazwy - Tom I |Wikibooks:Moduły/Nazwy/Tom II|Moduł:Nazwy - Tom II |Wikibooks:Moduły/Nazwy/Tom III|Moduł:Nazwy - Tom III |Wikibooks:Moduły/Nazwy/Tom IV|Moduł:Nazwy - Tom IV |Wikibooks:Moduły/Nazwy/Np|Moduł:Nazwy - Np |Wikibooks:Moduły/Pudełko|Moduł:Pudełko |Wikibooks:Moduły/Pudełko/Tom I|Moduł:Pudełko - Tom I |Wikibooks:Moduły/Pudełko/Tom II|Moduł:Pudełko - Tom II |Wikibooks:Moduły/Pudełko/Tom III|Moduł:Pudełko - Tom III |Wikibooks:Moduły/Pudełko/Tom IV|Moduł:Pudełko - Tom IV |Wikibooks:Moduły/Pudełko/Tom V|Moduł:Pudełko - Tom V |Wikibooks:Moduły/Pudełko/Pomocne|Moduł:Pudełko - Pomocne |Wikibooks:Moduły/Pudełko/Potrzebne|Moduł:Pudełko - Potrzebne |Wikibooks:Moduły/Pudełko/ParametryCechy|Moduł:Pudełko - Parametry Cechy |Wikibooks:Moduły/Ramka|Moduł:Ramka |Wikibooks:Moduły/Specjalne|Moduł:Specjalne |Wikibooks:Moduły/StronicowyParser|StronicowyParser |Wikibooks:Moduły/StronicowyParser/Tom I|StronicowyParser - Tom I |Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy|StronicowyParser - AnalizaSpisuRzeczy |Wikibooks:Moduły/StronicowyParser/GłównaFunkcjaZbieraniaDanychStron|StronicowyParser - GłównaFunkcjaZbieraniaDanychStron |Wikibooks:Moduły/StronicowyParser/Kategorie|StronicowyParser - Kategorie |Wikibooks:Moduły/StronicowyParser/NumerLubNazwaArtykułówKsiążek|StronicowyParser - NumerLubNazwaArtykułówKsiążek |Wikibooks:Moduły/StronicowyParser/NumerLubNazwaNagłówkówKsiążek|StronicowyParser - NumerLubNazwaNagłówkówKsiążek |Wikibooks:Moduły/StronicowyParser/NumerObiektu|StronicowyParser - NumerObiektu |Wikibooks:Moduły/StronicowyParser/NumeracjaObiektówStron|StronicowyParser - NumeracjaObiektówStron |Wikibooks:Moduły/StronicowyParser/Potrzebne|StronicowyParser - Potrzebne |Wikibooks:Moduły/StronicowyParser/Problemy|StronicowyParser - Problemy |Wikibooks:Moduły/StronicowyParser/Rozdziały|StronicowyParser - Rozdziały |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I|StronicowyParser - Rozdziały - Tom I |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II|StronicowyParser - Rozdziały - Tom II |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III|StronicowyParser - Rozdziały - Tom III |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV|StronicowyParser - Rozdziały - Tom IV |Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom V|StronicowyParser - Rozdziały - Tom V |Wikibooks:Moduły/StronicowyParser/SpisTreści|StronicowyParser - SpisTreści |Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom I|StronicowyParser - SpisTreści - Tom I |Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II|StronicowyParser - SpisTreści - Tom II |Wikibooks:Moduły/StronicowyParser/StronaSubst|StronicowyParser - StronaSubst |Wikibooks:Moduły/StronicowyParser/Tekst|StronicowyParser - Tekst |Wikibooks:Moduły/StronicowyParser/ZbieranieDanychStron|StronicowyParser - ZbieranieDanychStron |Wikibooks:Moduły/StronicowyParser/SzablonyTekstu|StronicowyParser - SzablonyTekstu |Wikibooks:Moduły/StronicowyParser/informacje|StronicowyParser - informacje |Wikibooks:Moduły/StronicowyParser/obiekty|StronicowyParser - obiekty |Wikibooks:Moduły/Szeregi|Moduł:Szeregi |Wikibooks:Moduły/Skrót|Moduł:Skrót |Wikibooks:Moduły/Strony|Moduł:Strony |Wikibooks:Moduły/Sekcja referencyjna|Moduł:Sekcja referencyjna |Wikibooks:Szablony/Ogólne|Szablony - Ogólne |Wikibooks:Szablony/Informacje|Szablony - Informacje |Wikibooks:Szablony/PrzypisStrona|PrzypisStrona |Wikibooks:Szablony/Podręcznikowe|Szablony - Podręcznikowe |Wikibooks:Szablony/Książkowe|Szablony - Książkowe |Wikibooks:Szablony/Tekst|Szablony - Tekst |Wikibooks:Szablony/Zawartość|Szablony - Zawartość |Wikibooks:Szablony/Nagłówki|Szablony - Nagłówki |Wikibooks:Szablony/Przekierowania|Szablony - Przekierowania |Wikibooks:Szablony/Języki|Szablony - Języki |Wikibooks:Szablony/Liczby|Szablony - Liczby |Wikibooks:Szablony/Kategorie|Szablony - Kategorie |Wikibooks:Szablony/Opisy|Szablony - Opisy |Wikibooks:Szablony/Znaczniki|Szablony - Znaczniki |Wikibooks:Szablony/Szablony opływania|Szablony opływania |Wikibooks:Szablony/Stronicowe|Szablony - Stronicowe |Wikibooks:Szablony/Kontenerowe|Szablony - Kontenerowe |Wikibooks:Szablony/Elastyczne|Szablony - Elastyczne |Wikibooks:Szablony/Infoboksy/Prolog|Szablony - Infoboksy - Prolog |Wikibooks:Szablony/Infoboksy/Tom I|Szablony - Infoboksy - Tom I |Wikibooks:Szablony/Infoboksy/Tom II|Szablony - Infoboksy - Tom II |Wikibooks:Szablony/Infoboksy/Tom III|Szablony - Infoboksy - Tom III |Wikibooks:Szablony/Infoboksy/Tom IV|Szablony - Infoboksy - Tom IV |Wikibooks:Szablony/Infoboksy/Tom V|Szablony - Infoboksy - Tom V |Wikibooks:Szablony/Infoboksy/Tom VI|Szablony - Infoboksy - Tom VI |Wikibooks:Szablony/Infoboksy/Komponenty|Szablony - Infoboksy - Komponenty |Wikibooks:Szablony/Infoboksy/Komponenty (organizmy żywe)|Infoboksy - Komponenty (organizmy żywe) |Wikibooks:Szablony/Porządkowe|Szablony - Porządkowe |Wikibooks:Szablony/Źródła artykułów|Szablony - Źródła artykułów |Wikibooks:Szablony/Linki|Szablony - Linki |Wikibooks:Szablony/Linki inteligentne|Szablony - Linki inteligentne |Wikibooks:Szablony/Do usunięcia|Szablony - Do usunięcia |Wikibooks:Szablony/Nawigacja|Szablony - Nawigacja |Wikibooks:Szablony/Media|Szablony - Media |Wikibooks:Szablony/Grafika|Szablony - Grafika |Wikibooks:Szablony/Licencjonowanie|Szablony - Licencjonowanie |Wikibooks:Szablony/Techniczne|Szablony - Techniczne |Wikibooks:Szablony/Wikipedysta|Szablony - Wikipedysta |Wikibooks:Szablony/Dyskusja Wikipedysty|Szablony - Dyskusja Wikipedysty |Wikibooks:Szablony/MediaWiki|Szablony - MediaWiki |Wikibooks:Szablony/Systemowe|Szablony - Systemowe |Pomoc:Spis treści/Szablony/Tom I|Szablony - Tom I |Pomoc:Spis treści/Szablony/Tom II|Szablony - Tom II |Pomoc:Spis treści/Szablony/Tom III|Szablony - Tom III |Pomoc:Spis treści/Szablony/Tom IV|Szablony - Tom IV |Pomoc:Spis treści/Administracja|Administracja |Wikibooks:Kwestie techniczne|Kwestie techniczne |Wikibooks:Wikipedyści potrzebujący pomocy|Wikipedyści potrzebujący pomocy |Wikibooks:Zgłoś błąd (ZB)|Zgłoś błąd (ZB) |Wikibooks:Lista Naruszeń Praw Autorskich (NPA)|Lista Naruszeń Praw Autorskich (NPA) |Wikibooks:Administratorzy|Administratorzy |Wikibooks:Prośby do administratorów|Prośby do administratorów |Wikibooks:Administratorzy interfejsu|Administratorzy interfejsu |Wikibooks:Prośby do administratorów interfejsu|Prośby do administratorów interfejsu |Wikibooks:Biurokraci|Biurokraci |Wikibooks:Boty|Boty |Wikibooks:Stewardzi|Stewardzi |Wikibooks:Użytkownicy|Użytkownicy |Wikibooks:Automatycznie zatwierdzeni użytkownicy|Automatycznie zatwierdzeni użytkownicy |Wikibooks:Zatwierdzeni użytkownicy|Zatwierdzeni użytkownicy |Wikibooks:Przyznawanie uprawnień|Przyznawanie uprawnień |Wikibooks:Nazwa użytkownika|Nazwa użytkownika |Wikibooks:Prośby o zmianę nazwy użytkownika|Prośby o zmianę nazwy użytkownika |Wikibooks:Uprawnieni do logowania się z zablokowanych adresów IP|Uprawnieni do logowania się z zablokowanych adresów IP |Wikibooks:GNU Free Documentation License|GNU Free Documentation License }}</includeonly><noinclude>{{Dokumentacja|zawartość=Szablon manualny (ręczny), nie automatyczny, bo ustawiony za pomocą {{Parametr|automat manualny|tak}}, wskazujący poprzedni i następny artykuł pomocy oraz ich stronę główną, czyli spis po {{LinkPomoc2|Spis treści}}.}}{{Kategoria|Szablony nawigacyjne układu autonawigacji do autonawigacji podręczników}}</noinclude> 918c3uc0zzf5ybowr1jakxf75hby2fu Konkurs Piosenki Eurowizji/Geografia konkursu: Dlaczego w Europie gra Australia, Izrael i Azerbejdżan 0 63547 551353 543265 2026-08-11T10:41:28Z CommonsDelinker 1569 Removing [[:c:File:Stage_Opening_06-fill_size=1600x900.jpg|Stage_Opening_06-fill_size=1600x900.jpg]], it has been deleted from Commons by [[:c:User:Gbawden|Gbawden]] because: per [[:c:Commons:Deletion requests/File:Stage Opening 06-fill size=1600x900.jpg| 551353 wikitext text/x-wiki [[Plik:Wiener Stadthalle for Eurovision 2026 (night).jpg|mały]] Konkurs Piosenki Eurowizji jest często postrzegany jako impreza wyłącznie europejska, jednak uczestniczyły w nim lub uczestniczą nadawcy z Australii, Izraela, Azerbejdżanu, Maroka czy Armenii. Zrozumienie tych przypadków wymaga odwołania się do kryteriów uczestnictwa, które opierają się nie na geografii politycznej, lecz na przynależności do określonych instytucji i stref nadawczych. == Kryterium uczestnictwa: Europejska Strefa Nadawcza i EBU == Prawo do udziału w konkursie mają wyłącznie nadawcy posiadający status Członka Aktywnego Europejskiej Unii Nadawców (EBU). Kryterium uzyskania tego statusu nie jest przynależność geograficzna do Europy, lecz jeden z dwóch warunków: Znajdowanie się w granicach Europejskiej Strefy Nadawczej – obszaru geograficznego zdefiniowanego przez Międzynarodowy Związek Telekomunikacyjny (ITU), który obejmuje nie tylko Europę, ale również część Azji Zachodniej oraz północną Afrykę. Posiadanie statusu obserwatora lub uczestnika w Radzie Europy przez dane państwo. Kraje takie jak Izrael, Azerbejdżan, Armenia, Gruzja czy Maroko spełniają pierwsze kryterium, ponieważ ich terytoria mieszczą się w granicach Europejskiej Strefy Nadawczej. Maroko uczestniczyło w konkursie jednorazowo w 1980 roku. == Izrael i Azerbejdżan: specyfika uczestnictwa == Izrael jest uczestnikiem Eurowizji od 1973 roku. Izraelska publiczna stacja telewizyjna (obecnie Kan) jest Członkiem Aktywnym EBU ze względu na położenie kraju w granicach Europejskiej Strefy Nadawczej. Izrael trzykrotnie wygrał konkurs (1978, 1979, 1998), a w roku 1999 po raz pierwszy był gospodarzem Eurowizji. Azerbejdżan przystąpił do konkursu w 2008 roku. Kraj ten leży na pograniczu Europy i Azji; jego zachodni region geograficznie mieści się w Europejskiej Strefie Nadawczej, co stanowiło podstawę dla Azerbaijani Public Television (ITV) do uzyskania członkostwa w EBU. == Australia: wyjątek od reguły == Australia jest szczególnym przypadkiem, ponieważ nie spełnia ani geograficznego, ani instytucjonalnego kryterium podstawowego. Australijska publiczna stacja SBS nie jest Członkiem Aktywnym EBU, lecz jedynie Członkiem Stowarzyszonym, który zwykle nie ma prawa uczestnictwa w konkursie jako uczestnik. Zaproszenie Australii do rywalizacji od 2015 roku wynikało wyłącznie z decyzji EBU, podjętej z okazji 60. jubileuszu Eurowizji i związanej z faktem, że SBS transmituje konkurs dla australijskiej widowni od dziesięcioleci, budując tam dużą popularność wydarzenia. EBU przyznało Australii specjalny status uczestnika, odnawialny każdego roku, co oznacza, że kraj ten bierze udział w konkursie na podstawie indywidualnego zaproszenia, a nie stałego regulaminowego uprawnienia. 39cyq2swwvavbi938vd4j4eulfxn5oz Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I 4 63902 551199 2026-08-10T12:25:19Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.TekstWprowadzeniaTekstu}} == Funkcja liczy tekst pomiędzy dwoma rozdziami o danych identyfikatorach {{Code|id}} na podstawie podanego tekstu do rozważań, kt…” 551199 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.TekstWprowadzeniaTekstu}} == Funkcja liczy tekst pomiędzy dwoma rozdziami o danych identyfikatorach {{Code|id}} na podstawie podanego tekstu do rozważań, który może posiadać rozdziały z tymi unikalnymi wartościami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do analizy, do uzyskania pomiędzy dwoma identyfikatorami tekstu, * {{Code|id_rozdzialu1}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany od poczatku, do pewnego identyfikatora, * {{Code|id_rozdzialu2}} - ten rozdział drugi, przed którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany do końca, od pewnego identyfikatora. Przykład użycia: <syntaxhighlight lang="lua"> local strona="Pomoc:Spis treści"; local title=mw.title.makeTitle('',strona); local tekst=title:getContent(); local id_rozdzialu1="Pomoc Wikibooks"; local id_rozdzialu2="Wstęp"; local stronicowyparser_rozdzialu_modul=require("Module:StronicowyParser/Rozdziały"); tekst=stronicowyparser_rozdzialu_modul.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2); </syntaxhighlight> Uzykane wyniki w tekście pomiędzy dwoma identyfikatorami: <syntaxhighlight lang="lua"> local tekst="'''{{lr|Czym jest Wikibooks|Wikibooks}}''' jest zbiorem darmowych książek pisanych przez internautów. Poniższe strony pomocy zawierają porady i informacje o naszym projekcie. Projekt ten – będący siostrzanym projektem Wikipedii – powstał 10 lipca 2003 r. Polska wersja została uruchomiona '''24 stycznia 2004 roku''' i w tej chwili posiada już {{Forma wyrazu podręcznik po liczbie|'''{{LICZBAPODRĘCZNIKÓW}}'''}}, a w nich {{Forma wyrazu artykuł po liczbie|'''{{NUMBEROFARTICLES}}'''}}."; </syntaxhighlight> == {{Code|p.TekstPoNapisieWprowadzeniaTekstuStrony}} == Funkcja liczy tekst pomiędzy dwoma {{Code|id}} rozdziałami o danych identyfikatorach na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.TekstPoNapisieWprowadzeniaTekstuStrony(frame)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - tablica ramki funkcji rablicy transportu. Parametry ramki funkcji tablicy transprotu dziecka rodzica: * {{Code|1}} - nazwa strony do analizy (rozwijany funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}}), którego chcemy sprawdzić zawartość strony, jeśli istnieje, pomiędzy dwoma {{Code|id}} rozdziałami - funkcja rozwija nazwę strony wwzględem funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}}, * {{Code|2}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany od poczatku, do pewnego identyfikatora, * {{Code|3}} - ten rozdział drugi, przed którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany do końca, od pewnego identyfikatora. Funkcja ramki uruchamia: {{Code|{{sr|#p.TekstWprowadzeniaTekstu|b=tak}}}}, do wyszukiwania tekstu pomiędzy dwoma rozdziałami, jako typową funkcję biblioteczną. Przykłady użycia w postaci ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="mediawiki"> {{#invoke:StronicowyParser/Rozdziały|TekstPoNapisieWprowadzeniaTekstuStrony|Pomoc:Spis treści|Pomoc Wikibooks|Wstęp}}; </syntaxhighlight> Wyniki zwrócone przez ramkę uruchomioną, w rozdzicu, jako dziecko: <syntaxhighlight lang="mediawiki"> '''{{lr|Czym jest Wikibooks|Wikibooks}}''' jest zbiorem darmowych książek pisanych przez internautów. Poniższe strony pomocy zawierają porady i informacje o naszym projekcie. Projekt ten – będący siostrzanym projektem Wikipedii – powstał 10 lipca 2003 r. Polska wersja została uruchomiona '''24 stycznia 2004 roku''' i w tej chwili posiada już {{Forma wyrazu podręcznik po liczbie|'''{{LICZBAPODRĘCZNIKÓW}}'''}}, a w nich {{Forma wyrazu artykuł po liczbie|'''{{NUMBEROFARTICLES}}'''}}. </syntaxhighlight> == {{Code|p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony}} == Funkcja zwraca nagłówek (sekcję) rozwinięty o danym identyfikatorze na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje. Funkcja też uwzględnia, że dany rozdział w tekście może się powtarzać, i dlatego trzeba to robić za pomocą numerków przy {{Code|id}}, aby wyszukać ten ściśle określony . Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - tablica ramki tablicy transportu funkcji. Parametry ramki funkcji tablicy transportu: * {{Code|1}} - nazwa strony - funkcja rozwija nazwę strony, * {{Code|2}} - identyfikator rozdzialu - domyślna wartość pusta. Przykłady użycia: <syntaxhighlight lang="lua"> {{#invoke:StronicowyParser/Rozdziały|ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony|Wikibooks:Jak_przeglądać_Wikibooks|Opera}} </syntaxhighlight> Uzyskane wyniki w postaci nierozwiniętego wikikodu: <syntaxhighlight lang="mediawiki"> <templatestyles src="Szablon:Link_wewnętrzny/styles.css"><span class="niew link">[[:w:Opera (program)|Opera]]</span> </syntaxhighlight> == {{Code|p.NumerSekcjiStrony}} == Funkcja liczy numer sekcji rozdziału, który posiada dany identyfikator na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NumerSekcjiStrony(frame)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - tablica ramki funkcji rablicy transportu. Parametry ramki funkcji tablicy transprotu dziecka rodzica: * {{Code|1}} - nazwa strony do analizy (rozwijany funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}}), którego chcemy sprawdzić zawartość strony, jeśli istnieje, pomiędzy dwoma id rozdziałami - funkcja rozwija nazwę strony wwzględem funkcji: frame:preprocess, * {{Code|2}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta, Przykład użycia w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> {{#invoke:StronicowyParser/Rozdziały|NumerSekcjiStrony|Wikibooks:Jak_przeglądać_Wikibooks|Opera}} </syntaxhighlight> Otrzymane wyniki, to przedstawia numer sekcji podanego rozdziału jest: {{Code|9}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2mzaf0o2ticpcxdemxanzalt5muwlrg Wikibooks:Moduły/StronicowyParser/Rozdziały 4 63903 551201 2026-08-10T12:30:49Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == Wstęp == Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}…” 551201 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == Wstęp == Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. === Rozdziały === * Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane: ** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}}, ** Inne (nierównaniowe): *** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}}, *** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}}, * Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}}, * Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}. === Zmienne spotykane w opisywanych tutaj funkcjach === ==== Zmienne bazy ==== W poniższych funkcjach często spotykamy parametry: * {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje, * {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku. ==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ==== * {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu, * {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu, * {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów. ==== Baza danych wikikodu ==== Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu. ===== Zmienne bazy danych i do nich parametrów ===== * {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy. ===== Inne elementy bazy ===== * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku. ==== Funkcje bazy danych i do nich parametrów ==== * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Inne funkcje ==== ===== Funkcje bazy ===== * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych, * {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej). ===== Inne ===== * {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych. ==== Elementy bazy ==== * {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie, * {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. ==== Inne zmienne ==== * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki, * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów === Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu(); local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji) local tab_obiekt=tab_analiza[obiekt]; if(not tab_obiekt)then return;end; for _,wartosc in pairs(tab_obiekt)do local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc]; if(element_wartosc)then element_wartosc[kod]=nil; end; end; end; </syntaxhighlight> Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy === A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne: <syntaxhighlight lang="lua"> local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji) tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil; end; </syntaxhighlight> Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli. Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> eh23j41ils4e56cz2qrjbco1yssxk3i 551207 551201 2026-08-10T13:02:54Z Persino 2851 551207 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == Wstęp == Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. === Rozdziały === * Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane: ** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}}, ** Inne (nierównaniowe): *** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}}, *** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}}, * Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}}, * Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}. === Zmienne spotykane w opisywanych tutaj funkcjach === ==== Zmienne bazy ==== W poniższych funkcjach często spotykamy parametry: * {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje, * {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku. ==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ==== * {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu, * {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu, * {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów. ==== Baza danych wikikodu ==== Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu. ===== Zmienne bazy danych i do nich parametrów ===== * {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy. ===== Inne elementy bazy ===== * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku. ==== Funkcje bazy danych i do nich parametrów ==== * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Inne funkcje ==== ===== Funkcje bazy ===== * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych, * {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej). ===== Inne ===== * {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych. ==== Elementy bazy ==== * {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie, * {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. ==== Inne zmienne ==== * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki, * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów === Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu(); local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji) local tab_obiekt=tab_analiza[obiekt]; if(not tab_obiekt)then return;end; for _,wartosc in pairs(tab_obiekt)do local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc]; if(element_wartosc)then element_wartosc[kod]=nil; end; end; end; </syntaxhighlight> Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy === A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne: <syntaxhighlight lang="lua"> local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji) tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil; end; </syntaxhighlight> Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli. Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. == Spis treści == * {{lru|Moduły/StronicowyParser/Rozdziały/Tom I}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom II}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom III}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sn0dustx5hxwfsp0d9r0c9qnzbs6mro 551228 551207 2026-08-10T13:55:57Z Persino 2851 551228 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == Wstęp == Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. === Rozdziały === * Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane: ** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}}, ** Inne (nierównaniowe): *** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}}, *** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}}, * Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}}, * Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}. === Zmienne spotykane w opisywanych tutaj funkcjach === ==== Zmienne bazy ==== W poniższych funkcjach często spotykamy parametry: * {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje, * {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku. ==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ==== * {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu, * {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu, * {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów. ==== Baza danych wikikodu ==== Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu. ===== Zmienne bazy danych i do nich parametrów ===== * {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy. ===== Inne elementy bazy ===== * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku. ==== Funkcje bazy danych i do nich parametrów ==== * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Inne funkcje ==== ===== Funkcje bazy ===== * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych, * {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej). ===== Inne ===== * {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych. ==== Elementy bazy ==== * {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie, * {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. ==== Inne zmienne ==== * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki, * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów === Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu(); local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji) local tab_obiekt=tab_analiza[obiekt]; if(not tab_obiekt)then return;end; for _,wartosc in pairs(tab_obiekt)do local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc]; if(element_wartosc)then element_wartosc[kod]=nil; end; end; end; </syntaxhighlight> Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}. === Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy === A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne: <syntaxhighlight lang="lua"> local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji) tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil; end; </syntaxhighlight> Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli. Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. == Spis treści == * {{lru|Moduły/StronicowyParser/Rozdziały/Tom I}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom II}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom III}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom IV}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> me4gd9u53su6v9lcvjvrvbgq9p498ay Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II 4 63904 551204 2026-08-10T12:57:12Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|…” 551204 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - tekst wnętrza rozdziału, * {{Code|poziom}} - numer całkowity dodatni poziomu. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial="Tekst rozdziału"; local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4); local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8); </syntaxhighlight> Wyniki użycia w zmiennych: <syntaxhighlight lang="lua"> local napis_rozdzialu1="\n====Tekst rozdziału====\n"; local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n"; </syntaxhighlight> == {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} == Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu. Defnicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu, * {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu. Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę. Przykłady użycia, używając omawianego szablonu: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}} {{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}} </syntaxhighlight> Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki: <syntaxhighlight lang="lua"> local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ==="; local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>"; </syntaxhighlight> A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną): <syntaxhighlight lang="lua"> local zawartosc="Zawartość znacznika"; local zawartosc="Zawartość znacznika"; </syntaxhighlight> W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się: <syntaxhighlight lang="lua"> if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end; if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end; </syntaxhighlight> Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić). == {{Code|p.NapisWprowadzeniaTekstuHNumer}} == Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstuHNumer(parametr)...end; </syntaxhighlight> Parametry funkcji: * {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też. Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Nagłówek tekstu ===}} {{HNumer|1= ======= Nagłówek tekstu =======}} </syntaxhighlight> Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody: <syntaxhighlight lang="lua"> ---- Nagłówki typowo dodatnie local tekst1="=== Nagłówek tekstu ==="; local tekst2="======= Nagłówek tekstu ======="; ---- Wywołania tworzące nagłówki local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1); local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2); </syntaxhighlight> Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}: <syntaxhighlight lang="lua"> local naglowek1="<h3>Nagłówek tekstu</h3>"; local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>"; </syntaxhighlight> == {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} == Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana, Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="====== Tekst nagłówka ======"; local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst); </syntaxhighlight> Wynikiem działania tego przykładu: <syntaxhighlight lang="lua"> local naglowek="Tekst nagłówka"; local poziom=6; </syntaxhighlight> Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie. == {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} == Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local zawartosc="Tekst nagłówka"; local poziom=5; </syntaxhighlight> == {{Code|p.CzyJestNapisWprowadzeniaTekstu}} == Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n"; local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst); </syntaxhighlight> W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli: <syntaxhighlight lang="lua"> local napis_pierwszy_w_tekscie="== Tekst nagłówka == "; </syntaxhighlight> Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}. == {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n"; local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}. == {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} == Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Definicja skrótowa funkcji <syntaxhighlight lang="lua"> function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem. Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny). Przykłady funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst1="====== Tekst nagłówka ======"; local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1); local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local czy_jest_naglowek1,jaki_naglowek1=true,true; local czy_jest_naglowek2,jaki_naglowek2=true,false; </syntaxhighlight> == {{Code|p.WierszHNumer}} == Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WierszHNumer(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - parametr z tymi nagłówkami. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>"; local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> q9gw8fcwlfulkf951kpwba11ppbmzsv 551208 551204 2026-08-10T13:09:56Z Persino 2851 551208 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - tekst wnętrza rozdziału, * {{Code|poziom}} - numer całkowity dodatni poziomu. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial="Tekst rozdziału"; local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4); local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8); </syntaxhighlight> Wyniki użycia w zmiennych: <syntaxhighlight lang="lua"> local napis_rozdzialu1="\n====Tekst rozdziału====\n"; local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n"; </syntaxhighlight> == {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} == Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu. Defnicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu, * {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu. Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę. Przykłady użycia, używając omawianego szablonu: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}} {{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}} </syntaxhighlight> Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki: <syntaxhighlight lang="lua"> local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ==="; local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>"; </syntaxhighlight> A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną): <syntaxhighlight lang="lua"> local zawartosc="Zawartość znacznika"; local zawartosc="Zawartość znacznika"; </syntaxhighlight> W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się: <syntaxhighlight lang="lua"> if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end; if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end; </syntaxhighlight> Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić). == {{Code|p.NapisWprowadzeniaTekstuHNumer}} == Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstuHNumer(parametr)...end; </syntaxhighlight> Parametry funkcji: * {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też. Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Nagłówek tekstu ===}} {{HNumer|1= ======= Nagłówek tekstu =======}} </syntaxhighlight> Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody: <syntaxhighlight lang="lua"> ---- Nagłówki typowo dodatnie local tekst1="=== Nagłówek tekstu ==="; local tekst2="======= Nagłówek tekstu ======="; ---- Wywołania tworzące nagłówki local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1); local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2); </syntaxhighlight> Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}: <syntaxhighlight lang="lua"> local naglowek1="<h3>Nagłówek tekstu</h3>"; local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>"; </syntaxhighlight> == {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} == Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana, Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="====== Tekst nagłówka ======"; local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst); </syntaxhighlight> Wynikiem działania tego przykładu: <syntaxhighlight lang="lua"> local naglowek="Tekst nagłówka"; local poziom=6; </syntaxhighlight> Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie. == {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} == Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local zawartosc="Tekst nagłówka"; local poziom=5; </syntaxhighlight> == {{Code|p.CzyJestNapisWprowadzeniaTekstu}} == Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n"; local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst); </syntaxhighlight> W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli: <syntaxhighlight lang="lua"> local napis_pierwszy_w_tekscie="== Tekst nagłówka == "; </syntaxhighlight> Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}. == {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n"; local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}. == {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} == Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Definicja skrótowa funkcji <syntaxhighlight lang="lua"> function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem. Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny). Przykłady funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst1="====== Tekst nagłówka ======"; local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1); local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local czy_jest_naglowek1,jaki_naglowek1=true,true; local czy_jest_naglowek2,jaki_naglowek2=true,false; </syntaxhighlight> == {{Code|p.WierszHNumer}} == Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WierszHNumer(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - parametr z tymi nagłówkami. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>"; local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n"; </syntaxhighlight> == {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} == Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez. Zwracane wartości: * {{Code|rozdzial}} - rozdzial bez numeracji, * {{Code|numetracja}} - numeracja. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja="5.1.2.3."; </syntaxhighlight> ; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja=""; </syntaxhighlight> == {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} == Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametr funkcji: * {{Code|linia}} {{LinkPatrz|linia}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}. Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa): <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="Spis treści"; local tablica_analizy_obiektow_strony_dany_modul={}; ---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); ---- Koniec tej części kodu; local tablica_danych_parametrow_szablonu_strony={}; local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Funckja w tym wypadku zwraca wynik: <syntaxhighlight lang="lua"> local rozdzial,czy_tak="Spis treści",true; </syntaxhighlight> Weźmy inny przykład: <syntaxhighlight lang="lua"> ---- Przykład pierwszy; local linia="'''Nagłówek'''"; local rozdzial,czy_tak="'''Nagłówek'''",true; ---- Przykład drugi; local linia="'''Nagłówek'''."; local rozdzial,czy_tak="'''Nagłówek'''.",false; </syntaxhighlight> == {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} == Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: * {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}}, * {{Code|linia}} {{LinkPatrz|linia}} - linia bez przedrostka, * {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}} - parametry nazw książki, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}. Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="''[[Książka/Artykuł|Artykuł]]''"; local tablica_analizy_obiektow_strony_dany_modul={}; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local przedrotek_listy=":"; local tablica_danych_parametrow_szablonu_strony={}; local tab_nazwa_spisow_przekierowaniowych={}; ---- Tutaj funkcja zwróci wartość: true; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); ---- Tutaj funkcja zwróci wartość: false; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> == {{Code|p.HnNumerWprowadzeniaTekstu}} == Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa}} - nazwa tagu, * {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''. Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w: <syntaxhighlight lang="lua"> p.znaczniki_wprowadzenia_tekstu={ ["h1"]=1, ["h2"]=2, ["h3"]=3, ["h4"]=4, ["h5"]=5, ["h6"]=6, }; </syntaxhighlight> Funkcja posługuje się jedynie na tych typach znaczników, a nie innych. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h5"; local atrybuty={}; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja zwróci wynik: {{Code|5}}. ; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h6"; local atrybuty={};atrybuty["class"]="mw-hnumber-9"; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja daje wynik: {{Code|9}}. == {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} == Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="5.1.6. Rozdział"; local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local numeracja,rozdzial="5.1.6.","Rozdział"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rgbzqmh9otuqq0lc2bbz76axqzrcgbi 551209 551208 2026-08-10T13:13:20Z Persino 2851 /* {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} */ 551209 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - tekst wnętrza rozdziału, * {{Code|poziom}} - numer całkowity dodatni poziomu. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial="Tekst rozdziału"; local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4); local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8); </syntaxhighlight> Wyniki użycia w zmiennych: <syntaxhighlight lang="lua"> local napis_rozdzialu1="\n====Tekst rozdziału====\n"; local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n"; </syntaxhighlight> == {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} == Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu. Defnicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu, * {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu. Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę. Przykłady użycia, używając omawianego szablonu: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}} {{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}} </syntaxhighlight> Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki: <syntaxhighlight lang="lua"> local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ==="; local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>"; </syntaxhighlight> A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną): <syntaxhighlight lang="lua"> local zawartosc="Zawartość znacznika"; local zawartosc="Zawartość znacznika"; </syntaxhighlight> W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się: <syntaxhighlight lang="lua"> if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end; if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end; </syntaxhighlight> Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić). == {{Code|p.NapisWprowadzeniaTekstuHNumer}} == Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstuHNumer(parametr)...end; </syntaxhighlight> Parametry funkcji: * {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też. Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Nagłówek tekstu ===}} {{HNumer|1= ======= Nagłówek tekstu =======}} </syntaxhighlight> Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody: <syntaxhighlight lang="lua"> ---- Nagłówki typowo dodatnie local tekst1="=== Nagłówek tekstu ==="; local tekst2="======= Nagłówek tekstu ======="; ---- Wywołania tworzące nagłówki local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1); local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2); </syntaxhighlight> Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}: <syntaxhighlight lang="lua"> local naglowek1="<h3>Nagłówek tekstu</h3>"; local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>"; </syntaxhighlight> == {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} == Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana, Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="====== Tekst nagłówka ======"; local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst); </syntaxhighlight> Wynikiem działania tego przykładu: <syntaxhighlight lang="lua"> local naglowek="Tekst nagłówka"; local poziom=6; </syntaxhighlight> Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie. == {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} == Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local zawartosc="Tekst nagłówka"; local poziom=5; </syntaxhighlight> == {{Code|p.CzyJestNapisWprowadzeniaTekstu}} == Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n"; local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst); </syntaxhighlight> W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli: <syntaxhighlight lang="lua"> local napis_pierwszy_w_tekscie="== Tekst nagłówka == "; </syntaxhighlight> Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}. == {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n"; local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}. == {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} == Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Definicja skrótowa funkcji <syntaxhighlight lang="lua"> function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem. Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny). Przykłady funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst1="====== Tekst nagłówka ======"; local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1); local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local czy_jest_naglowek1,jaki_naglowek1=true,true; local czy_jest_naglowek2,jaki_naglowek2=true,false; </syntaxhighlight> == {{Code|p.WierszHNumer}} == Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WierszHNumer(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - parametr z tymi nagłówkami. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>"; local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n"; </syntaxhighlight> == {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} == Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez. Zwracane wartości: * {{Code|rozdzial}} - rozdzial bez numeracji, * {{Code|numetracja}} - numeracja. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja="5.1.2.3."; </syntaxhighlight> ; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja=""; </syntaxhighlight> == {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} == Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametr funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}. Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa): <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="Spis treści"; local tablica_analizy_obiektow_strony_dany_modul={}; ---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); ---- Koniec tej części kodu; local tablica_danych_parametrow_szablonu_strony={}; local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Funckja w tym wypadku zwraca wynik: <syntaxhighlight lang="lua"> local rozdzial,czy_tak="Spis treści",true; </syntaxhighlight> Weźmy inny przykład: <syntaxhighlight lang="lua"> ---- Przykład pierwszy; local linia="'''Nagłówek'''"; local rozdzial,czy_tak="'''Nagłówek'''",true; ---- Przykład drugi; local linia="'''Nagłówek'''."; local rozdzial,czy_tak="'''Nagłówek'''.",false; </syntaxhighlight> == {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} == Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: * {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}}, * {{Code|linia}} {{LinkPatrz|linia}} - linia bez przedrostka, * {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}} - parametry nazw książki, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}. Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="''[[Książka/Artykuł|Artykuł]]''"; local tablica_analizy_obiektow_strony_dany_modul={}; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local przedrotek_listy=":"; local tablica_danych_parametrow_szablonu_strony={}; local tab_nazwa_spisow_przekierowaniowych={}; ---- Tutaj funkcja zwróci wartość: true; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); ---- Tutaj funkcja zwróci wartość: false; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> == {{Code|p.HnNumerWprowadzeniaTekstu}} == Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa}} - nazwa tagu, * {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''. Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w: <syntaxhighlight lang="lua"> p.znaczniki_wprowadzenia_tekstu={ ["h1"]=1, ["h2"]=2, ["h3"]=3, ["h4"]=4, ["h5"]=5, ["h6"]=6, }; </syntaxhighlight> Funkcja posługuje się jedynie na tych typach znaczników, a nie innych. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h5"; local atrybuty={}; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja zwróci wynik: {{Code|5}}. ; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h6"; local atrybuty={};atrybuty["class"]="mw-hnumber-9"; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja daje wynik: {{Code|9}}. == {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} == Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="5.1.6. Rozdział"; local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local numeracja,rozdzial="5.1.6.","Rozdział"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> b160k1ta5g9aee6gonnwfa9id7hd03n 551210 551209 2026-08-10T13:18:28Z Persino 2851 /* {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} */ 551210 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - tekst wnętrza rozdziału, * {{Code|poziom}} - numer całkowity dodatni poziomu. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial="Tekst rozdziału"; local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4); local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8); </syntaxhighlight> Wyniki użycia w zmiennych: <syntaxhighlight lang="lua"> local napis_rozdzialu1="\n====Tekst rozdziału====\n"; local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n"; </syntaxhighlight> == {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} == Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu. Defnicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu, * {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu. Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę. Przykłady użycia, używając omawianego szablonu: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}} {{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}} </syntaxhighlight> Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki: <syntaxhighlight lang="lua"> local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ==="; local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>"; </syntaxhighlight> A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną): <syntaxhighlight lang="lua"> local zawartosc="Zawartość znacznika"; local zawartosc="Zawartość znacznika"; </syntaxhighlight> W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się: <syntaxhighlight lang="lua"> if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end; if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end; </syntaxhighlight> Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić). == {{Code|p.NapisWprowadzeniaTekstuHNumer}} == Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NapisWprowadzeniaTekstuHNumer(parametr)...end; </syntaxhighlight> Parametry funkcji: * {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też. Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem: <syntaxhighlight lang="mediawiki"> {{HNumer|1= === Nagłówek tekstu ===}} {{HNumer|1= ======= Nagłówek tekstu =======}} </syntaxhighlight> Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody: <syntaxhighlight lang="lua"> ---- Nagłówki typowo dodatnie local tekst1="=== Nagłówek tekstu ==="; local tekst2="======= Nagłówek tekstu ======="; ---- Wywołania tworzące nagłówki local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1); local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2); </syntaxhighlight> Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}: <syntaxhighlight lang="lua"> local naglowek1="<h3>Nagłówek tekstu</h3>"; local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>"; </syntaxhighlight> == {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} == Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana, Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="====== Tekst nagłówka ======"; local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst); </syntaxhighlight> Wynikiem działania tego przykładu: <syntaxhighlight lang="lua"> local naglowek="Tekst nagłówka"; local poziom=6; </syntaxhighlight> Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie. == {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} == Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local zawartosc="Tekst nagłówka"; local poziom=5; </syntaxhighlight> == {{Code|p.CzyJestNapisWprowadzeniaTekstu}} == Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n"; local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst); </syntaxhighlight> W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli: <syntaxhighlight lang="lua"> local napis_pierwszy_w_tekscie="== Tekst nagłówka == "; </syntaxhighlight> Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}. == {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n"; local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}. == {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} == Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Definicja skrótowa funkcji <syntaxhighlight lang="lua"> function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem. Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny). Przykłady funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst1="====== Tekst nagłówka ======"; local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>"; local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1); local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local czy_jest_naglowek1,jaki_naglowek1=true,true; local czy_jest_naglowek2,jaki_naglowek2=true,false; </syntaxhighlight> == {{Code|p.WierszHNumer}} == Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WierszHNumer(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - parametr z tymi nagłówkami. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>"; local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n"; </syntaxhighlight> == {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} == Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez. Zwracane wartości: * {{Code|rozdzial}} - rozdzial bez numeracji, * {{Code|numetracja}} - numeracja. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja="5.1.2.3."; </syntaxhighlight> ; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local rozdzial_z_numeracja="Napis Rozdziału"; local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local rozdzial="Napis Rozdziału"; local numeracja=""; </syntaxhighlight> == {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} == Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametr funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}. Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa): <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="Spis treści"; local tablica_analizy_obiektow_strony_dany_modul={}; ---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); ---- Koniec tej części kodu; local tablica_danych_parametrow_szablonu_strony={}; local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Funckja w tym wypadku zwraca wynik: <syntaxhighlight lang="lua"> local rozdzial,czy_tak="Spis treści",true; </syntaxhighlight> Weźmy inny przykład: <syntaxhighlight lang="lua"> ---- Przykład pierwszy; local linia="'''Nagłówek'''"; local rozdzial,czy_tak="'''Nagłówek'''",true; ---- Przykład drugi; local linia="'''Nagłówek'''."; local rozdzial,czy_tak="'''Nagłówek'''.",false; </syntaxhighlight> == {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} == Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: * {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}}, * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia bez przedrostka, * {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}} - parametry nazw książki, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local linia="''[[Książka/Artykuł|Artykuł]]''"; local tablica_analizy_obiektow_strony_dany_modul={}; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local przedrotek_listy=":"; local tablica_danych_parametrow_szablonu_strony={}; local tab_nazwa_spisow_przekierowaniowych={}; ---- Tutaj funkcja zwróci wartość: true; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); ---- Tutaj funkcja zwróci wartość: false; local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> == {{Code|p.HnNumerWprowadzeniaTekstu}} == Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa}} - nazwa tagu, * {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''. Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w: <syntaxhighlight lang="lua"> p.znaczniki_wprowadzenia_tekstu={ ["h1"]=1, ["h2"]=2, ["h3"]=3, ["h4"]=4, ["h5"]=5, ["h6"]=6, }; </syntaxhighlight> Funkcja posługuje się jedynie na tych typach znaczników, a nie innych. Przykłady użycia: ; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h5"; local atrybuty={}; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja zwróci wynik: {{Code|5}}. ; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}} <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa="h6"; local atrybuty={};atrybuty["class"]="mw-hnumber-9"; local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); </syntaxhighlight> Funkcja daje wynik: {{Code|9}}. == {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} == Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local zawartosc="5.1.6. Rozdział"; local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local numeracja,rozdzial="5.1.6.","Rozdział"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 7knerw1mrztq8ay5yxks3h30wm6sy4u Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III 4 63905 551211 2026-08-10T13:20:21Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude>” 551211 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> c0m8yweal5b9gim3n01w9tm53e39mkw 551213 551211 2026-08-10T13:26:38Z Persino 2851 551213 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h6dd5ixs0yyer26wkhkssopmpfikexh 551214 551213 2026-08-10T13:32:43Z Persino 2851 /* {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} */ 551214 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5xc77qlx0e5pggdymvpdd3jctwdgi3r 551215 551214 2026-08-10T13:33:59Z Persino 2851 /* {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} */ 551215 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9oycq1rhj9f8q41768c46tq13aosgal 551216 551215 2026-08-10T13:34:47Z Persino 2851 /* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */ 551216 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dy4et9wvant4qzchml190gusn4kcfsd 551217 551216 2026-08-10T13:35:16Z Persino 2851 /* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */ 551217 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> cvh7smiy2lqfv2vx9afxijf9qdq5uez 551218 551217 2026-08-10T13:35:49Z Persino 2851 /* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */ 551218 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 350zhx7enmi3a9xoljznzo9buqpm560 551219 551218 2026-08-10T13:37:56Z Persino 2851 /* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */ 551219 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1gov52axjf0iheov9xox4gl9liz99kv 551220 551219 2026-08-10T13:42:12Z Persino 2851 551220 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2d9472xisi4wfck7eqihdd1m41cb55s 551221 551220 2026-08-10T13:45:07Z Persino 2851 /* {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} */ 551221 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 56cj22gjw9up5pnymdfpd8aeiyc93ix 551222 551221 2026-08-10T13:47:27Z Persino 2851 /* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */ 551222 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1mbekoq6nsj8d0sdxtaf434s6ipgpsu 551223 551222 2026-08-10T13:48:12Z Persino 2851 /* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */ 551223 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4cya2wx20lzp97uqm1glr2n6oj1xo9o 551224 551223 2026-08-10T13:49:36Z Persino 2851 /* {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} */ 551224 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sivv6lz6dtbtqfvfed2zslrgck1yp4x 551225 551224 2026-08-10T13:50:58Z Persino 2851 /* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */ 551225 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> majfdk4cmaskfndd684u5db7kq37h6d 551226 551225 2026-08-10T13:52:31Z Persino 2851 /* {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} */ 551226 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> cyd56ujhdmhhddfeddna32pdbocrgir 551227 551226 2026-08-10T13:53:34Z Persino 2851 /* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */ 551227 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0hf66y9bhi57qew5vk907xjweveregw 551351 551227 2026-08-11T02:50:16Z Persino 2851 551351 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> lnyji2pghkqleltcgzqalt3wvbf8tt0 551352 551351 2026-08-11T03:04:05Z Persino 2851 /* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */ 551352 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} == Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}. Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}. Funkcja wykorzystuje: * {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, * {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny. Przykład użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}."; local tablica_analizy_obiektow_strony_dany_modul={}; local tablica_danych_parametrow_szablonu_strony={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji. == {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} == Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}. == {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} == Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local nazwa_szablonu="Kompletność krótka"; local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil); </syntaxhighlight> Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli. == {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} == Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do przerobienia. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___"; tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst); </syntaxhighlight> Uzyskano wyniki: <syntaxhighlight lang="lua"> tekst="Tekst_nagłówka_strony"; </syntaxhighlight> == {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} == Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury. Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne; }; </syntaxhighlight> Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami, * {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu; local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}. == {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} == Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela: <syntaxhighlight lang="lua"> p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}. Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości. Przykłady użycia: <syntaxhighlight lang="lua"> local szablon="{{ISBN|83-8678-825-9}}"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały") local tablica_danych_parametrow_szablonu_strony={}; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul); local tekst=""; for szablon,obiekt,kod in iterator do if(obiekt=="SZABLON")then tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst; end; end; </syntaxhighlight> Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}. == {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} == Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}."; local tablica_analizy_obiektow_strony_dany_modul={}; tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Zwrócone wyniki: <syntaxhighlight lang="lua"> local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n ."; </syntaxhighlight> == {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} == Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.: <syntaxhighlight lang="lua"> p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; </syntaxhighlight> Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy, * {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n"; local tablica_analizy_obiektow_strony_dany_modul={}; local szablonowe_modul=require("Module:Szablonowe"); tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local tablica_danych_parametrow_szablonu_strony={}; tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil); </syntaxhighlight> Zwracane wyniki: <syntaxhighlight lang="lua"> local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'"; </syntaxhighlight> j3nfzyffl4hdkt83yfyny3zs23np0n8 Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV 4 63906 551229 2026-08-10T13:56:56Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zw…” 551229 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nch1bgat5v7vfjymex6rzm43k6m13bv 551230 551229 2026-08-10T13:59:05Z Persino 2851 551230 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dsqzn7iu9axz2trcu78pat3w8x6ih5t 551231 551230 2026-08-10T14:01:51Z Persino 2851 /* Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe */ 551231 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> t5mniadqps9uxvw9rmqjf4j7lw07276 551232 551231 2026-08-10T14:02:16Z Persino 2851 /* Znaczniki wprowadzenia tekstu */ 551232 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom III}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mym0451cx7mmo4tydqmi33gp53k15ey 551233 551232 2026-08-10T14:03:29Z Persino 2851 /* Znaczniki wprowadzenia tekstu */ 551233 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8bqizylo5te8tmn3hjfkf4o5jyevuof 551234 551233 2026-08-10T14:04:33Z Persino 2851 /* {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} */ 551234 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 06ybq5qcke0au7t1oopezg2f1zjtihm 551235 551234 2026-08-10T14:12:48Z Persino 2851 /* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */ 551235 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 55tca8f0hkg0vbhj2f08yepgdszusgl 551236 551235 2026-08-10T14:15:22Z Persino 2851 /* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */ 551236 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/Rozdziały}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 6h3ng2cnezx2yy1s0w9yungly3seean 551237 551236 2026-08-10T14:18:05Z Persino 2851 /* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */ 551237 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> l7lg43vv968eb1fg0is5quzxbte50cl 551238 551237 2026-08-10T14:18:51Z Persino 2851 /* Szablony i znaczniki, wyróżniające linie, które są rozdziałami */ 551238 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ay7vuhvjn9pdpvg7iynk501ixpt6joi 551239 551238 2026-08-10T14:20:23Z Persino 2851 /* Szablony, z których z których zostawiane są tylko zawartości */ 551239 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 70em95jqym9g0weyb4eky1u47pelsl9 551240 551239 2026-08-10T14:21:39Z Persino 2851 /* Opis dalszy funkcji */ 551240 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej|StronicowyParser/Rozdziały}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> haf2jnsow2ga9yz5rxbm2o4x7pldu29 551241 551240 2026-08-10T14:23:48Z Persino 2851 /* Opis dalszy funkcji */ 551241 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9oms7ph0s6qpu4ncio38wyj77zb41mh 551242 551241 2026-08-10T14:26:13Z Persino 2851 /* {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} */ 551242 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> srndhakpdfav1dxvt60uhe4ij8qjqs9 551243 551242 2026-08-10T14:27:15Z Persino 2851 /* {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} */ 551243 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 7vc9aljfzyqldyjqgp7ka7lelkhbtnj 551244 551243 2026-08-10T14:29:19Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551244 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> f88se0okv04xl5soyv7168eqw2h85hd 551245 551244 2026-08-10T14:31:40Z Persino 2851 /* {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} */ 551245 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> t798me88nrlq1xm270nf1847dku41q7 551246 551245 2026-08-10T14:32:20Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551246 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom III}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nag2230l1hcjefravuue6hqzxaw4x51 551247 551246 2026-08-10T14:33:22Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551247 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8t59o2siykypiumdr215wfx32q6w1k0 551248 551247 2026-08-10T14:34:35Z Persino 2851 /* {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} */ 551248 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> p2oclxv2k7xd1kprugk18lx7ia4elni 551249 551248 2026-08-10T14:36:47Z Persino 2851 /* Zmiana tekstu krok 1 */ 551249 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE|StronicowyParser/Rozdziały}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n3p3pbusiuicmi3x6revg5m26ay78h5 551250 551249 2026-08-10T14:37:22Z Persino 2851 /* Zmiana tekstu krok 1 */ 551250 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> cxjs2uxmnfwkkxhpsl7mfpiu9k9wltb 551251 551250 2026-08-10T14:37:46Z Persino 2851 /* Zmiana tekstu krok 1 */ 551251 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 67qt4bqy2ru09gtzg8otcp07p3ty1ar 551252 551251 2026-08-10T14:38:51Z Persino 2851 /* Zmiana tekstu krok 1 */ 551252 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1a4wkw3rt1bcdaf6rtehe59f7q80fmx 551253 551252 2026-08-10T14:39:27Z Persino 2851 /* Zmiana tekstu krok 1 */ 551253 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5jnelnpj0vmd3wpur7pkjnspjlnxh6o 551254 551253 2026-08-10T14:40:20Z Persino 2851 /* Zmiana tekstu krok 1 */ 551254 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gfun3po71usjha5gre08t6ye9k5ye37 551255 551254 2026-08-10T14:43:54Z Persino 2851 /* Zmiana tekstu krok 1 */ 551255 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8wdjhvqdq33pa8t84nth32b7tlz8hma 551256 551255 2026-08-10T14:45:25Z Persino 2851 /* Zmiana tekstu krok 1 */ 551256 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5gz1f68w3rgqmfb4powq0wbj5o5qgd3 551257 551256 2026-08-10T14:46:20Z Persino 2851 /* Zmiana tekstu krok 3 */ 551257 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9sy8gp85dr8iy222w0pu0ikkptgz6j2 551258 551257 2026-08-10T14:47:08Z Persino 2851 /* Kod wspólny */ 551258 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> lu6nw3rxxsgkycitr5784t44dwajsq3 551259 551258 2026-08-10T14:48:19Z Persino 2851 /* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */ 551259 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 539o3ug41tbzq50orqmloi0dyzxwrku 551260 551259 2026-08-10T14:49:51Z Persino 2851 /* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */ 551260 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sq01fxacrejue16k3yvfqy3epe1qfaz 551261 551260 2026-08-10T14:53:15Z Persino 2851 /* Kod dalszy funkcji */ 551261 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> p8mn47jlnca90ep1yxa1qbw5v0e1llz 551262 551261 2026-08-10T14:55:03Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551262 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> bj3ljq89k6ug7ax9wtilxu6rotbqz5s 551263 551262 2026-08-10T14:56:54Z Persino 2851 /* Wartości zwracane przez iterator */ 551263 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3arjbqobzi444z3arwty5m64e3ne63f 551264 551263 2026-08-10T15:02:57Z Persino 2851 551264 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pr37lfuq0qn0s739fqgu2jqbzm9std8 551266 551264 2026-08-10T17:44:06Z Persino 2851 /* Znaczniki szablonowe */ 551266 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ncvytep1i2wowzvb1isd1bndp7bkhgx 551269 551266 2026-08-10T17:59:44Z Persino 2851 /* Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział */ 551269 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ajkdxgiaeebkn0mz094kerm9iatz0c5 551270 551269 2026-08-10T18:02:03Z Persino 2851 /* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */ 551270 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> q2cr0jgm80wnwwtumv7bwvb8vwddmdb 551271 551270 2026-08-10T18:03:23Z Persino 2851 /* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem */ 551271 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> f0o96xcto3kdrunl49r21z9mmozns7l 551274 551271 2026-08-10T18:53:24Z Persino 2851 /* Wartości zwracane przez funkcję w przypadku wykrycia rozdziału */ 551274 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 40721vl4r6hz29lzn1grre2llawtilu 551275 551274 2026-08-10T18:56:47Z Persino 2851 /* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */ 551275 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k7k2u5vo9nyt633p6f1hsw7vutee73w 551276 551275 2026-08-10T19:15:12Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551276 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pn9pxunyu27t90w7zkduowxdj9et8pq 551277 551276 2026-08-10T19:17:17Z Persino 2851 /* {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} */ 551277 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> a99sz6z1a4mg2bcwmawkiqq92hvzyzz 551280 551277 2026-08-10T19:57:30Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551280 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 59xtez20oyw02mx3y6896krqh5zjwok 551281 551280 2026-08-10T20:02:49Z Persino 2851 /* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */ 551281 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> c9qy2hs8k5qquwmn4dz2jdmz4fukxw3 551283 551281 2026-08-10T20:13:33Z Persino 2851 /* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */ 551283 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|trimowanie}} - czy jest włączone trimowanie komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tjxkij331pngyadxj5g5zttjgd6i3p8 551285 551283 2026-08-10T21:03:31Z Persino 2851 /* {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} */ 551285 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h7lwo7w63akpnzbh0qr03m3tlownkfi 551286 551285 2026-08-10T21:30:51Z Persino 2851 /* Zmiana tekstu krok 1 */ 551286 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g9fcusb7ziv7a6953hlcn4y3vtvfzd2 551287 551286 2026-08-10T21:36:57Z Persino 2851 /* Zmiana tekstu krok 1 */ 551287 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik. Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 99370on3dgotyg6qkzf65gs93fitat2 551288 551287 2026-08-10T22:04:23Z Persino 2851 /* Zmiana tekstu krok 1 */ 551288 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> melumktwgbrah3lpcp3nkizp6whgowc 551289 551288 2026-08-10T22:12:35Z Persino 2851 /* Zmiana tekstu krok 2 */ 551289 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> bskm6agqbyuspeiyhproj03fwe1k9yr 551290 551289 2026-08-10T22:14:36Z Persino 2851 /* Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych */ 551290 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. {{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka. Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku. {{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}. {{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 63d5v7q09km5dbxhujse1tycwijinwh 551291 551290 2026-08-10T22:23:04Z Persino 2851 /* {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} */ 551291 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę. Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> f6997ab20tsik20xftnh5okd2tkle2q 551292 551291 2026-08-10T22:31:52Z Persino 2851 /* {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} */ 551292 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ldpbpsl72wnzwmgekljt23lhof5gji0 551293 551292 2026-08-10T22:39:31Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551293 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> j635eacc8zzj1zrgukz0dgdzogidcbs 551294 551293 2026-08-10T23:02:10Z Persino 2851 /* Kod dalszy funkcji */ 551294 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana. {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 7euswvwmcv895dzsdz89v07vu8gny7y 551295 551294 2026-08-10T23:12:49Z Persino 2851 /* Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} */ 551295 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> r32j2wdxj3w8gm6y7apz7yb7b13dpss 551296 551295 2026-08-10T23:26:07Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551296 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9mooude3au6bnlpn88aj9kd4cg4oa4y 551297 551296 2026-08-10T23:30:06Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551297 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hr8kpruvuw5w4mhau2b6k0bixgnitg7 551298 551297 2026-08-10T23:33:36Z Persino 2851 551298 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> lz284w1uho8bjyel8uw3memgwqkn8e8 551330 551298 2026-08-11T00:59:34Z Persino 2851 /* Możliwe operacje robione przez funkcję */ 551330 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1c3r0osit6vx6iu43ssm2upogrt5ui5 551331 551330 2026-08-11T01:01:38Z Persino 2851 /* Możliwe operacje robione przez funkcję */ 551331 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> inlt5nd8oq6rvbpdt3pfpk8sku85k3v 551332 551331 2026-08-11T01:09:31Z Persino 2851 /* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */ 551332 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ji7lch48mg6p8kh25gz9uiw1n3a96wa 551333 551332 2026-08-11T01:13:00Z Persino 2851 /* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */ 551333 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdziałw odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 47u60y8b25rvmxybpo1ga24317tzakn 551334 551333 2026-08-11T01:27:20Z Persino 2851 /* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */ 551334 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}. ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4e1q82ugtmze3wf7rr691hnhvvf1j5i 551335 551334 2026-08-11T01:30:41Z Persino 2851 /* Rozdziały centrowane */ 551335 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdziału nagłówka ====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> km7hwltg3cynfscsmx5rwfcqhghj07i 551336 551335 2026-08-11T01:35:45Z Persino 2851 /* Rozdziału nagłówka */ 551336 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jid09sofxt46mfz0n3b6tcqw9fl839c 551337 551336 2026-08-11T01:42:58Z Persino 2851 /* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem */ 551337 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Możliwe operacje robione przez funkcję ==== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> o70hcbmy3t2mxumfbieadg8y1jmgapu 551338 551337 2026-08-11T01:52:53Z Persino 2851 /* Możliwe operacje robione przez funkcję */ 551338 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qrwrte08pazs1d5uix0h5p0hmd39m22 551339 551338 2026-08-11T01:54:03Z Persino 2851 /* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */ 551339 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h1whapj5ylvtuq5s56cnbz8k8yotikg 551340 551339 2026-08-11T01:57:24Z Persino 2851 /* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */ 551340 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej ===== Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy tabelami: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tych wartości prawwdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> kdus8fix9p8cuc0lg296jcyzacu2lnp 551341 551340 2026-08-11T02:02:49Z Persino 2851 /* Iterator po zawartości tekstu linii prawdopodobnego rozdziału */ 551341 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0gmzjnpc2be70isv55plfk7s7cj0xgx 551342 551341 2026-08-11T02:03:53Z Persino 2851 /* Możliwe operacje robione przez funkcję */ 551342 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1aedx6v6co04d0bacxdbo1ddpw1o0q3 551343 551342 2026-08-11T02:16:41Z Persino 2851 /* Iterator po zawartości tekstu linii prawdopodobnego rozdziału */ 551343 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> q9o9ca9aq3j80zchatis8xjxr59ayas 551344 551343 2026-08-11T02:19:42Z Persino 2851 /* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */ 551344 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> saywzpjvn9b3r90vp2kjax4xim15lqi 551345 551344 2026-08-11T02:21:58Z Persino 2851 /* Linki wewnętrzne i zewnętrzne */ 551345 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> bzy216j2pzd5fuulx5gh0qhawo2tnad 551346 551345 2026-08-11T02:26:09Z Persino 2851 /* Wartości zwracane przez funkcję w przypadku wykrycia rozdziału */ 551346 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ===== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ====== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ====== Rozdziały centrowane ====== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}====== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})====== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> surk5hr2ql98ldlc6d8dhjmgtenf28u 551347 551346 2026-08-11T02:31:08Z Persino 2851 /* {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} */ 551347 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ==== Linki wewnętrzne i zewnętrzne ==== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ==== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ===== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ===== Rozdziały centrowane ===== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}===== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})===== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> b96fsv2wj4oqe6c9etlu7269pmt7ryk 551348 551347 2026-08-11T02:32:06Z Persino 2851 /* Linki wewnętrzne i zewnętrzne */ 551348 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ==== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ===== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ===== Rozdziały centrowane ===== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}===== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})===== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> las2ce43y1rk9v8ny46tpf4zzkwxcn9 551349 551348 2026-08-11T02:35:46Z Persino 2851 /* Uzyskany istniejący rozdział */ 551349 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ==== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ===== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ===== Rozdziały centrowane ===== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}===== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})===== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> lean5h74nr9xa2sxjtyaqtazk91l0or 551350 551349 2026-08-11T02:37:17Z Persino 2851 /* Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) */ 551350 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdział i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ==== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ===== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ===== Rozdziały centrowane ===== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}===== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})===== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nyfb2ek4q5tiw3tjf7jcevhmgqpxahj 551354 551350 2026-08-11T11:44:51Z Persino 2851 /* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}}) */ 551354 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end; </syntaxhighlight> Funkcja nie przyjmuje żadnego parametru. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); </syntaxhighlight> Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku. == {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} == Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) ... return function(linia,tak_ce_spis_tresci) ... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane. return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}} * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}. Parametry funkcji zwracanej: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział, * {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej. Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość: * {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia, * {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii, * {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}}, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}}, * {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}. Przykłady użycia: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local tablica_analizy_obiektow_strony_dany_modul={}; local linia="<h6>Nagłówek</h6>"; linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local tab_nazwa_spisow_przekierowaniowych={}; local nazwa_przestrzeni=""; local nazwa_przestrzeni_ksiazki=""; local nazwa_ksiazki="Książki"; local nazwa_spisu_tresci=""; local pelna_nazwa_spisu_tresci_szablonowa=""; local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) end; local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Funkcja zwraca wyniki: <syntaxhighlight lang="lua"> local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil; </syntaxhighlight> === Wartości początkowe przyjmowane przez funkcję === Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=70; </syntaxhighlight> Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział. Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. === Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}. ==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ==== Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada. ==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ==== Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej. ===== Pierwszego typu - linki inteligentne ===== Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ===== Drugiego typu - szablony tworzenia spisu rzeczy ===== Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}. ==== Znaczniki wprowadzenia tekstu ==== Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam. Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane. Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}. ==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ==== Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}: <syntaxhighlight lang="lua"> p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; </syntaxhighlight> Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}. ==== Funkcje lokalne ==== ===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} ===== Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy. ===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} ===== Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}. ===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} ===== Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie. Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi. ===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} ===== Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba. ===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} ===== To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ==== Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami. ==== Badanie jaki to jest rozdział ==== ===== Rozdział zerowy ===== ====== Sukces wyodrębnianiu rozdziału ====== Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu. ====== Brak numeracji rozdziału ====== {{HNumer|1= ======= Wykryta linia cudzysłowu ======= }} Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu. {{HNumer|1= ======= Adresu URL linii ======= }} W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne. ===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) ===== Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdział i numerację. ==== Uzyskany istniejący rozdział ==== Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji. ==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ==== Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych. ===== Możliwe operacje robione przez funkcję iteratora ===== Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią. ===== Obiekt szablon, czyli typu SZABLON ===== W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje. ===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK ===== Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}. ===== Linki wewnętrzne i zewnętrzne ===== Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam. ==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ==== Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial; </syntaxhighlight> Parametry zwracane przez funkcję zwracaną: * {{Code|linia}} - rozwarzana linia zwracana przez funkcję, * {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji, * {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}}, * {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami, * {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}. ===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ===== Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii. Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy. W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,0,nil,numeracja; </syntaxhighlight> Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}. W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}. ===== Rozdziały centrowane ===== Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}. Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}. Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,2,nil,numeracja,true; </syntaxhighlight> ===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}===== Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej. Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,numer_rozdzialu,nil,numeracja; </syntaxhighlight> ===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})===== Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}). Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział ma początek równy znakom listy, lub przed cudzysłowem (w ramach cudzysłowu) ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}: <syntaxhighlight lang="lua"> return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja; </syntaxhighlight> {{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja, jeśli któreś z nich nie istnieją lub są puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hbw7a77g17z47p7bdurz9w5c3tnujc8 Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom V 4 63907 551299 2026-08-10T23:33:29Z Persino 2851 Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i…” 551299 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2e3vxazxv3hmvz9nz6szy3myyz8h9rp 551300 551299 2026-08-10T23:35:03Z Persino 2851 /* Szablony i znaczniki, wyróżniające linie, które są rozdziałami */ 551300 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 63oxm4r32pyz1y38uhkfov55nd44qa0 551301 551300 2026-08-10T23:36:30Z Persino 2851 /* {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} */ 551301 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g6l1yqwmpsjmpavdlt4t3o1ynjmvta8 551302 551301 2026-08-10T23:37:19Z Persino 2851 /* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */ 551302 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jzoetkhxu24qqse9y1xz5odsdaylz11 551303 551302 2026-08-10T23:38:19Z Persino 2851 /* {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} */ 551303 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4vwoxb6rq8j32wnkctspm7tqageopxi 551304 551303 2026-08-10T23:40:09Z Persino 2851 /* Zmiana tekstu krok 1 */ 551304 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 77uva0lm8ueb7ro4mqi5a7jbaysrmth 551305 551304 2026-08-10T23:40:51Z Persino 2851 /* Zmiana tekstu krok 3 */ 551305 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> q88qdmpn0ru4ckllf34btwmwi6k0i4x 551306 551305 2026-08-10T23:41:37Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551306 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nnj0wht7m0ywtjkzb5xbybc3gkp3dor 551307 551306 2026-08-10T23:42:20Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551307 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9dj5gvx8jovkzh78l9lirksl7lq5yth 551308 551307 2026-08-10T23:43:37Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551308 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nnj0wht7m0ywtjkzb5xbybc3gkp3dor 551309 551308 2026-08-10T23:44:39Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551309 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g2ahykliuw7r4igewe2an6z790qw5iy 551310 551309 2026-08-10T23:45:26Z Persino 2851 /* Kod dalszy funkcji */ 551310 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> crd3o8si3a7a00e2rxepu619fd65d4h 551311 551310 2026-08-10T23:46:42Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551311 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> c6cts1djuwrhofv5zet3ng7796sabqa 551312 551311 2026-08-10T23:47:34Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551312 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 041z52xrwdt3y7m8lhemz1rqbrss6fs 551313 551312 2026-08-10T23:49:10Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551313 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> snkioyb6baw4gwtzdo7uvrkpujiyur2 551314 551313 2026-08-10T23:49:43Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551314 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> oeh94irrfwqqn2p91esmh21ay0lo8mg 551315 551314 2026-08-10T23:50:45Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551315 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sb32g3wgnbtp5hz1fwlp20b12y75ptt 551316 551315 2026-08-10T23:51:55Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551316 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2i11ostgbklhnqfbq88sep3njvdal2k 551317 551316 2026-08-10T23:52:51Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551317 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rv5jbnvw3zvl1i86hkv2937pkpq0kx9 551318 551317 2026-08-10T23:53:41Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551318 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> m8k4blvn87sry13kgeheff773eid7cu 551319 551318 2026-08-10T23:54:57Z Persino 2851 /* Wartości zwracane przez iterator */ 551319 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> plnrj70io1d6ym74q4jueh0j9mzlwyl 551320 551319 2026-08-10T23:55:51Z Persino 2851 /* Wartości zwracane przez iterator */ 551320 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9mf8jlxes7bbhc9wnfo3jo5rlxcpbkv 551322 551320 2026-08-11T00:06:14Z Persino 2851 /* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */ 551322 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ftkw8990s2bncuafoabp02ggkey6964 551323 551322 2026-08-11T00:09:59Z Persino 2851 /* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */ 551323 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3p67zpqeuhtcxrg3xl9u6u3wb37q8yo 551324 551323 2026-08-11T00:20:56Z Persino 2851 /* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */ 551324 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5o8x9spejmvpkw6ufhbllji5n7t2vvz 551325 551324 2026-08-11T00:23:38Z Persino 2851 /* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */ 551325 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tazlmc0919uudu7b89syi7ca2dymsuk 551326 551325 2026-08-11T00:25:04Z Persino 2851 /* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */ 551326 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ai5oygo8mcpf6cxsb9inf4rqpxoo5uj 551327 551326 2026-08-11T00:25:31Z Persino 2851 /* Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} */ 551327 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9jczvk3n2jytk980j7sc5tfi4n4eudg 551328 551327 2026-08-11T00:35:58Z Persino 2851 /* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */ 551328 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdy nie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, tzn. artykułów wstępnych, przed wszelkimi rozdziałami, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5bhrvsbee6vz4zglwr8jfbj3gyk1dir 551329 551328 2026-08-11T00:53:53Z Persino 2851 /* {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} */ 551329 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne. Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału. Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU) ... return function() .... return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany; end; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony, * {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, * {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}}, * {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe, * {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość, * {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału), * {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. Parametry funkcji zwracanej: * Funkcja nie przyjmuje żadnych parametrów. Jednoczesne parametry zwracane przez funkcję zwracaną: * {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią, * {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału), * {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału, * {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału * {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}}, * {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym. === Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} === Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}. ==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ==== Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. ==== Szablony, projektów i tekstów, usuwane z tekstu ==== Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; </syntaxhighlight> Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}. Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich. ==== Szablony, z których z których zostawiane są tylko zawartości ==== Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. ==== Inne szablony usuwane z tekstu ==== Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}: <syntaxhighlight lang="lua"> p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; </syntaxhighlight> Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu. Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}: <syntaxhighlight lang="lua"> p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; </syntaxhighlight> Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika. ==== Znaczniki szablonowe ==== Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}: <syntaxhighlight lang="lua"> p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; </syntaxhighlight> Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu. ==== Szablony generujące poziomy o dowolnym poziomie ==== Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}. ==== Magiczne derektywy ==== Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}: <syntaxhighlight lang="lua"> p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, }; </syntaxhighlight> ==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ==== Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}. ==== Artykuły nieartykularne (okładki) ==== Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły. === Przykłady === Przykładowe użycia: <syntaxhighlight lang="lua"> local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst"); local __FUNKCJA_PARAMETRY=nil; local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY); local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow) ... ---- Funkcja aktualnie nieużywana; local szablonowe_modul=require("Module:Szablonowe"); if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end; --- pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu; local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true); return tekst; end; local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek) ... return str; end; local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); return tekst; end; local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU); ---- iterator - iterator; ---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy; local parsuj_rozdzialami=nil; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ... --- Gdy tekst ma rozdziały iterowalne; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; if(not parsuj_rozdzialami)then ... ---- Gdy tekst nie ma rozdziałów iterowalnych; end; </syntaxhighlight> === Opis dalszy funkcji === Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}. Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne. Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej. ==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ==== Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana. ===== Definicje potrzebnych funkcji do opisu działającego kodu ===== Przedstawiamy tutaj definicję lokalnych funkcji. ====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ====== Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii, tzn. ich zamiany każda z nich na jedną spację. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieNowychLiniiZnacznikowe(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp). Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}. ====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ====== Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}: * {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}. Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}. Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}. ====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ====== Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local Modyfikacja=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji. ====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ====== Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika, ** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika, ** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika. Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}. Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie. ====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ====== Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|komorka}} - przetwarzana komórka - linia, * {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki. Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki|&nbsp;}}}}, {{Code|{{Nowiki|&#32;}}}} i {{Code|{{Nowiki|&#x20}}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą. Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp. Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś. ====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ====== Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZamienNaKody(zawartosc,czy_szablon)...end; </syntaxhighlight> * {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}}, * {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu. Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}. Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio. Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość. ====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ====== Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię, * {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni. Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}. Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości. Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji. Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}. ===== Dalszy opis ===== Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. ====== Zmiana tekstu krok 1 ====== Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module. {{HNumer|1= ======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane ======= }} Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}, * Parametry znacznikowe: ** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, ** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}, * {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}. Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję: {{HNumer|1= ======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ======== }} Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}, * {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}}, * {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}. {{HNumer|1= ========= Szablony sztucznego wprowadzenia tekstu ========= }} Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu. Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej. {{HNumer|1= ========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} ========= }} Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}. {{HNumer|1= ========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} ========= }} Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaSzablonu(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}. Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej. {{HNumer|1= ========= Modyfikacja napisów wprowadzenia tekstu szablonowych ========= }} Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}. {{HNumer|1= ========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków ========= }} {{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu. {{HNumer|1= ========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ========== }} Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon; </syntaxhighlight> A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}. {{HNumer|1= ========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu ========= }} A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów. {{HNumer|1= ========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków ========= }} A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości. Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości. {{HNumer|1= ======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ======== }} {{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}. {{HNumer|1= ========= Znaczniki inne niż {{Tag|div}} ========= }} Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu. {{HNumer|1= ========= Znaczniki warstw {{Tag|div}} ========= }} A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty. {{HNumer|1= ========= Inne znaczniki niż rozważane wcześniej jako podstawa ========= }} {{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością. {{HNumer|1= ========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii ========= }} {{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji. {{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu. {{HNumer|1= ======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ======== }} Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu. {{HNumer|1= ========= Obiekty linków zewnętrznych i wewnętrznych ========= }} Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione. Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość. Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link. {{HNumer|1= ======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ======== }} Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób. ====== Zmiana tekstu krok 2 ====== Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją. Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim. ====== Zmiana tekstu krok 3 ====== Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia. Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia. Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia. A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia. ==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ==== Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}. A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich. ==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ==== Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana. ==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ==== Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem: <syntaxhighlight lang="lua"> local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil); </syntaxhighlight> A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}. Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}. ==== Kod wspólny ==== ===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} ===== W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Wystepowanie(linia,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem. Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie. ====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ====== Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}. Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinie(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek. Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}. ====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ====== Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function RozwazajLinieZnacznikowe(zawartosc)...end; </syntaxhighlight> Parametry funkcji: * {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu. Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu. {{HNumer|1= ======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} ======= }} Funkcja właściwa do rozwazania szczególnego z obiektami. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CenterZnacznikLinia(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga). {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce. W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana. ====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ====== Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function spis_tresci(wystepowanie_linkow,hn_number)...end; </syntaxhighlight> Parametry funkcji: * {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami, * {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania. Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego. {{HNumer|1= ======= {{Śródtytuł|Spis}}{{Code|Spis}} ======= }} Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}. Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania. Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}. W pozostałych wypadkach funkcja nie zwraca żadnego wyniku. {{HNumer|1= ======= Dalszy opis funkcji ======= }} Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany. Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}. W innym wypadku nie jest zwracana żadna wartość. ====== Kod dalszy funkcji ====== {{HNumer|1= ======= Warunki wstępne ======= }} Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}. Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane. {{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii. {{HNumer|1= ======= Iterator po rozważanej zmiennej, czyli iteracja po tekście ======= }} Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych. Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}. {{HNumer|1= ======== Obiekt szablonowy, czyli typu SZABLON ======== }} W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie. {{HNumer|1= ======== Obiekt znacznikowy, czyli typu ZNACZNIK ======== }} A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}. {{HNumer|1= ======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ======== }} Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}. ====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ====== ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}} {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie. ; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}} {{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}. ; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej {{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}. ====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ====== Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}. ====== Użytek wartości ze zmiennej {{Code|tak}} ====== Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}. ==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ==== Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}. ; Deklaracje zmiennych Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. ;; Rozdział dodatni Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}. Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość. ;;; Pierwsza anonimowa funkcja {{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}. Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą. ;;; Druga anonimowa funkcja {{Tab}}Gdy nie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, tzn. artykułów wstępnych, przed wszelkimi rozdziałami, wtedy nazwa rozdziału jest nilowana. ;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według: <syntaxhighlight lang="lua"> local linia_temp; linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true); </syntaxhighlight> Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}. ==== Wartości zwracane przez iterator ==== Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}: <syntaxhighlight lang="lua"> {naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany; </syntaxhighlight> Gdzie parametry wartości zwracanych: * {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}}, * {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}. Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji. Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jf6zvwdxwbwb5z072ovubamivmg2ede